PlusMagi's Blog By Pitt Phunsanit Content Management System,Database,Technology เทคนิคใช้ SQL ปรับฟอร์แมต “วงเล็บ (นขลิขิต)” ให้ถูกต้องตามมาตรฐานราชบัณฑิตยสภา

เทคนิคใช้ SQL ปรับฟอร์แมต “วงเล็บ (นขลิขิต)” ให้ถูกต้องตามมาตรฐานราชบัณฑิตยสภา

ในฐานะนักพัฒนาระบบและผู้ดูแลข้อมูล (Data Architect) เราทราบดีว่าการจัดการเนื้อหาบทความจำนวนมาก (Content Management System – CMS) มักเผชิญกับปัญหาด้านความสม่ำเสมอของรูปแบบ (Consistency) โดยเฉพาะอย่างยิ่งเรื่องของการเว้นวรรครอบเครื่องหมายวงเล็บ ()

การจัดวางช่องว่างที่ผิดพลาด ไม่เพียงแต่ทำให้บทความดูไม่เป็นมืออาชีพ แต่ยังขัดต่อหลักเกณฑ์ทางภาษาของสำนักงานราชบัณฑิตยสภา บทความนี้จึงไม่ได้สอนแค่หลักไวยากรณ์ แต่จะพาคุณไปใช้พลังของ PostgreSQL และ Regular Expression (Regex) เพื่อแก้ไขข้อมูลที่ผิดพลาดทั้งฐานข้อมูลให้เป็นมาตรฐานเดียวกันในคำสั่งเดียว

💡 หลักการใช้นขลิขิต (วงเล็บ) ตามมาตรฐานราชบัณฑิตยสภา

ก่อนจะลงมือเขียนโค้ด เราต้องเข้าใจกฎเหล็กที่ต้องการแก้ไขเสียก่อน โดยอ้างอิงจากหลักเกณฑ์ของราชบัณฑิตยสภามีข้อกำหนดสำคัญดังนี้:

  • ภายในวงเล็บ (Inside): ข้อความต้องเขียนติดกับวงเล็บเปิดและปิดทันที (... )
  • ก่อนเปิดวงเล็บ (Before): ให้เว้นวรรค 1 ครั้ง ก่อนตัววงเล็บเปิด คำ (
  • หลังปิดวงเล็บ (After): ให้เว้นวรรค 1 ครั้ง หลังตัววงเล็บปิด ) คำ

🛠️ การแปลงกฎภาษาเป็นโค้ด PostgreSQL (Regex)

เมื่อข้อมูลอยู่ในฐานข้อมูลขนาดใหญ่ การแก้ไขด้วยมือจึงเป็นไปไม่ได้ เราจะใช้คำสั่ง UPDATE ร่วมกับฟังก์ชัน REGEXP_REPLACE ของ PostgreSQL

⚠️ ข้อควรระวังระดับ Senior Architect: ก่อนรันคำสั่งนี้กับ Production Database อย่างเด็ดขาด โปรดทำการ Backup (Snapshot) ตารางข้อมูลที่เกี่ยวข้องเสมอ เพื่อป้องกันความเสียหายของ Data Integrity

สคริปต์ด้านล่างนี้จะทำงานเป็น Pipeline 3 ขั้นตอนเพื่อแก้ไขช่องว่างให้ถูกต้องตามมาตรฐาน:

SQL

SQL

-- สมมติว่าตารางชื่อ 'articles' และคอลัมน์เนื้อหาคือ 'content' 
UPDATE articles
SET content = REGEXP_REPLACE( 
    REGEXP_REPLACE( 
        REGEXP_REPLACE(content, '\s*\(\s*', ' (', 'g'), -- Step 1: เคลียร์ช่องว่างรอบวงเล็บเปิด ให้เหลือเว้นวรรคด้านหน้า 1 ช่อง
        '\s*\)\s*', ') ', 'g'), -- Step 2: เคลียร์ช่องว่างภายในและบังคับให้มีเว้นวรรคหลังปิด
        ' {2,}', ' ', 'g') -- Step 3: ยุบ Double Space (ช่องว่างเบิ้ล) ให้เหลือเพียง 1 ช่อง
) 
WHERE content ~ '[\(\)]'; -- เลือกเฉพาะแถวที่มีวงเล็บ เพื่อ Optimize Performance

🔍 คำอธิบายการทำงานของสคริปต์ (PostgreSQL Logic)

  1. '\s*\(\s*', ' (', 'g'): Regex นี้ค้นหาการรวมกันของช่องว่างใด ๆ (`\s*`) ก่อนและหลังวงเล็บเปิด () จากนั้นแทนที่ด้วย ` ( ` เพื่อให้แน่ใจว่ามีเว้นวรรคด้านหน้าเพียงครั้งเดียว และเนื้อหาภายในจะชิดขอบทันที
  2. '\s*\)\s*', ') ', 'g'): ค้นหาช่องว่างรอบวงเล็บปิด () และแทนที่ด้วย `) ` เพื่อให้เนื้อหาภายในชิดขอบและบังคับเว้นวรรคด้านหลัง 1 ช่องเสมอ
  3. ' {2,}', ' ', 'g'): เป็นการทำความสะอาดขั้นสุดท้าย (Cleanup) เพื่อยุบช่องว่างที่อาจเกิดจากการทำงานของ Regex ก่อนหน้า ให้เหลือเพียงช่องว่างเดี่ยวตามหลักไวยากรณ์
  4. WHERE content ~ ‘[\(\)]’: นี่คือการใช้ตัวดำเนินการ Regular Expression ของ PostgreSQL (`~`) เพื่อจำกัดขอบเขตการทำงานให้เฉพาะแถวที่มีเครื่องหมายวงเล็บเท่านั้น ซึ่งช่วยเพิ่มประสิทธิภาพในการประมวลผลข้อมูลขนาดใหญ่ได้อย่างมาก

✅ สรุปและข้อแนะนำจาก System Specialist

การใช้ SQL ร่วมกับ Regex ไม่ได้เป็นเพียงแค่การแก้ไขรูปแบบ แต่เป็นการยกระดับ Data Integrity ของระบบทั้งหมด เมื่อข้อมูลถูกจัดฟอร์แมตให้มีมาตรฐานเดียวกัน จะช่วยลดภาระงานของ Content Editor และทำให้เว็บไซต์ของคุณดูน่าเชื่อถือและเป็นมืออาชีพอย่างยิ่ง

หากคุณต้องการความแม่นยำสูงสุดในการจัดการเนื้อหา ควรพิจารณาการสร้าง Validation Layer ในระดับ Application Code ควบคู่ไปกับการทำ Data Cleansing ด้วย SQL เพื่อให้มั่นใจว่าข้อมูลใหม่ที่ถูกป้อนเข้ามาจะถูกต้องตั้งแต่ต้นทางครับ