ในโลกของการพัฒนาซอฟต์แวร์ ข้อมูลที่ได้รับมามักไม่ได้อยู่ในรูปแบบที่สมบูรณ์เสมอไป โดยเฉพาะอย่างยิ่งข้อมูลที่ถูกส่งผ่านจากระบบภายนอก (เช่น CSV หรือฟอร์มที่ใช้เครื่องหมายจุลภาคคั่น) ซึ่งมักจะอยู่ในรูปแบบสตริงที่คั่นด้วยตัวแบ่ง (Delimiter) การจัดการข้อมูลลักษณะนี้ในฐานข้อมูลจึงเป็นความท้าทายที่นักพัฒนาต้องเผชิญ
“>ในฐานะ System Specialist ที่ทำงานกับ PostgreSQL เราทราบดีว่าการจัดการข้อมูลที่ถูกจัดเก็บเป็นสตริงยาวๆ เช่น ‘apple,banana,orange’ ไม่สามารถนำไป Query หรือวิเคราะห์ได้อย่างมีประสิทธิภาพ การแก้ปัญหานี้จึงต้องอาศัยฟังก์ชันเฉพาะทางของ PostgreSQL ที่ทรงพลังอย่าง string_to_array() และ unnest() เพื่อให้ข้อมูลกลับมาอยู่ในรูปแบบที่ฐานข้อมูลสามารถจัดการได้
💡 หลักการทำงาน: การแปลงสตริงให้เป็น Array ใน PostgreSQL
“>ปัญหาหลักคือการที่ PostgreSQL มองข้อมูล ‘1,2,3’ เป็นแค่ข้อความ (String) ไม่ใช่ชุดของค่า (Array) เพื่อให้สามารถนำค่าแต่ละตัวไป Query หรือ Join กับตารางอื่นได้ เราจึงต้องใช้ฟังก์ชันเหล่านี้เพื่อ ‘แตก’ (Split) ข้อมูลออกเป็นแถวๆ:
string_to_array(string, delimiter): ฟังก์ชันนี้ทำหน้าที่แปลงสตริงที่ถูกคั่นด้วยตัวแบ่ง (Delimiter) ให้กลายเป็นประเภทข้อมูล Array (เช่น แปลง ‘1,2,3’ ให้เป็น{'1', '2', '3'})unnest(array): ฟังก์ชันนี้ทำหน้าที่ ‘คลี่’ (Unnest) ข้อมูลจากประเภท Array ให้กลายเป็นชุดของแถว (Rows) ซึ่งเป็นรูปแบบที่ SQL Query สามารถนำไปใช้งานและ Join กับตารางอื่นได้
🚀 ตัวอย่างโค้ด: การแยกข้อมูลใน PostgreSQL
“>สมมติว่าเรามีตาราง product_data ที่มีคอลัมน์ tags_string เก็บข้อมูลแท็กที่คั่นด้วยเครื่องหมายจุลภาค (Comma-Separated) เราสามารถใช้ฟังก์ชันทั้งสองนี้ร่วมกันเพื่อแยกข้อมูลให้เป็นแถวได้อย่างสมบูรณ์:
SQL
-- 1. สร้างตารางจำลองเพื่อเก็บข้อมูลที่ถูกจัดเก็บแบบ String<br>CREATE TABLE product_data (id SERIAL PRIMARY KEY, tags_string TEXT);<br><br>-- 2. ใส่ข้อมูลตัวอย่าง (Tags ที่ถูกคั่นด้วยจุลภาค)<br>INSERT INTO product_data (tags_string) VALUES<br>('apple,banana,orange'),<br>('electronics,gadget,sale'),<br>('book,fiction,best-seller');<br><br>-- 3. ใช้ string_to_array() และ unnest() เพื่อแยกข้อมูล<br>SELECT<br> p.id AS product_id,<br> unnest(string_to_array(p.tags_string, ',')) AS tag_name<br>FROM<br> product_data p;<br>
ผลลัพธ์ที่ได้: แทนที่จะเห็นสตริงยาวๆ เราจะได้ผลลัพธ์เป็นแถวๆ โดยแต่ละแถวคือแท็กหนึ่งแท็ก ทำให้เราสามารถใช้ WHERE clause เพื่อค้นหาผลิตภัณฑ์ที่มีแท็กใดแท็กหนึ่งได้ง่ายขึ้นมาก เช่น WHERE tag_name = 'banana'
✅ สรุปและข้อควรจำ
“>การใช้ string_to_array() ร่วมกับ unnest() ถือเป็นเทคนิคสำคัญที่ Senior Architect ทุกคนควรทราบเมื่อต้องจัดการกับข้อมูลที่มาจากภายนอก (External Data Source) เสมอ จำไว้ว่าการแปลงข้อมูลจาก String เป็น Array และคลี่เป็นแถว (Unnesting) คือกุญแจสำคัญในการทำให้ข้อมูลที่ดูเหมือนเป็นข้อความธรรมดา กลับมามีโครงสร้างที่สามารถ Query และวิเคราะห์ได้อย่างมีประสิทธิภาพใน PostgreSQL