ป้ายกำกับ: Than

Windows: ดู Product KeyWindows: ดู Product Key

ในโลกของการจัดการฐานข้อมูล การรับข้อมูลที่มาในรูปแบบสตริง (String) ที่มีตัวคั่น (Delimiter) เช่น คอมมา (Comma) หรือเครื่องหมายขีดกลาง (Hyphen) เป็นเรื่องที่พบได้บ่อยมาก อย่างไรก็ตาม การเก็บข้อมูลเหล่านี้ไว้ในฟิลด์เดียวทำให้การ Query หรือการนำข้อมูลไปใช้งานต่อทำได้ยาก เนื่องจาก PostgreSQL ถูกออกแบบมาให้จัดการข้อมูลในรูปแบบที่มีโครงสร้าง (Structured Data) เช่น คอลัมน์หรืออาร์เรย์

บทความนี้จะเจาะลึกถึงเทคนิคการแปลงสตริงที่ถูกคั่นด้วยตัวอักขระ ให้กลายเป็นโครงสร้างข้อมูลที่สามารถใช้งานได้จริงใน PostgreSQL ไม่ว่าจะเป็นรูปแบบ Array หรือการแยกเป็นแถว (Rows) เพื่อให้คุณสามารถนำไปประมวลผลต่อได้อย่างมีประสิทธิภาพ

ทำไมต้องแยกสตริงใน PostgreSQL?

เมื่อคุณได้รับข้อมูลจากระบบภายนอก (เช่น CSV file) ข้อมูลที่เกี่ยวข้องหลายค่ามักถูกรวมเป็นสตริงเดียว การพยายาม Query ข้อมูลเหล่านั้นโดยตรงจะทำให้เกิดข้อจำกัดในการ Join Table หรือการใช้เงื่อนไข WHERE ที่ซับซ้อน การแปลงสตริงให้เป็นรูปแบบ Array หรือ Table จึงเป็นขั้นตอนสำคัญในการทำให้ข้อมูลพร้อมใช้งาน (Data Readiness) ก่อนการวิเคราะห์หรือการทำรายงาน

1. การใช้ฟังก์ชัน string_to_array() (สำหรับสร้าง Array)

หากคุณต้องการเก็บชุดข้อมูลที่ถูกแยกแล้วไว้ในคอลัมน์เดียว แต่ต้องการให้ PostgreSQL รู้ว่ามันคือชุดค่า ไม่ใช่แค่ข้อความธรรมดา คุณควรใช้ string_to_array() ฟังก์ชันนี้จะแปลงสตริงที่ถูกคั่นด้วยตัวกำหนด (Delimiter) ให้เป็น PostgreSQL Array ทันที

ตัวอย่างการใช้งาน:

SQL

SELECT string_to_array('apple,banana,orange', ',')::text[] AS fruit_array;

ผลลัพธ์: {apple,banana,orange} (แสดงให้เห็นว่าข้อมูลถูกจัดเก็บเป็น Array อย่างถูกต้อง)

2. การใช้ฟังก์ชัน regexp_split_to_table() (สำหรับแยกเป็นแถว/Rows)

นี่คือวิธีที่ทรงพลังที่สุดและมักถูกใช้บ่อยที่สุดในทางปฏิบัติ หากคุณต้องการให้ข้อมูลที่ถูกแยกออกมาแต่ละค่ากลายเป็นแถว (Row) ใหม่ในตารางเสมือน (Virtual Table) คุณควรใช้ regexp_split_to_table() ฟังก์ชันนี้จะทำงานร่วมกับ FROM clause ทำให้คุณสามารถ Query ข้อมูลที่แยกออกมาได้เหมือนกับว่ามันเป็นคอลัมน์จริงในตาราง

ตัวอย่างการใช้งาน:

SQL

SELECT unnest(regexp_split_to_table('1;2;3', ';')) AS split_value;

คำอธิบาย: ตัวอย่างนี้แสดงการแยกสตริง ‘1;2;3’ โดยใช้เครื่องหมายเซมิโคลอน (;) เป็นตัวคั่น และใช้ unnest() เพื่อดึงค่าที่แยกออกมาแต่ละค่าให้เป็นแถวที่สามารถ Query ได้

สรุปและแนวทางปฏิบัติที่ดีที่สุด (Conclusion)

การเลือกใช้ฟังก์ชันขึ้นอยู่กับวัตถุประสงค์ของคุณ: หากคุณต้องการเก็บข้อมูลชุดนั้นไว้ในรูปแบบ Array เดียวเพื่อความรวดเร็วในการจัดเก็บ ให้ใช้ string_to_array() แต่ถ้าคุณต้องการนำข้อมูลที่แยกออกมาแต่ละค่าไป Join, Filter, หรือคำนวณกับข้อมูลอื่น ๆ ในตารางอย่างปกติ ให้ใช้ regexp_split_to_table() เสมอ

การทำความเข้าใจการแปลงข้อมูลประเภทนี้ถือเป็นทักษะสำคัญของ Senior Data Engineer ที่จะช่วยให้คุณจัดการกับข้อมูลที่ไม่ได้ถูกจัดโครงสร้าง (Unstructured Data) ได้อย่างมีประสิทธิภาพในระบบ PostgreSQL ของคุณ