ป้ายกำกับ: คั่น

Database: List StringDatabase: List String

การใส่รายการ string แบบ VALUES ('A'), ('B'), ... จะยาวและแก้ไขยากเมื่อข้อมูลเพิ่มขึ้น วิธีที่ง่ายและสะอาดกว่าคือ ใช้ string เดียวคั่นด้วยเครื่องหมาย แล้วใช้ฟังก์ชันแยกเป็นแถว ( Split ) ซึ่ง syntax จะแตกต่างกันตาม Database ที่คุณใช้ครับ


PostgreSQL

WITH RawData(tag_name) AS (
  SELECT DISTINCT TRIM(unnest(string_to_array(
    'Access,Admin,Algorithm,Application,Authentication,Backup,Broken,Brute,Code,Components,Control,Cryptographic,Data,Database,Default,Design,Digital,Error,Failures,Firewall,Force,Forgery,Framework,HTTP,HTTPS,ID,Identification,Injection,Insecure,Integrity,Library,Log,Logging,Login,Misconfiguration,Module,Monitoring,Open,Outdated,OWASP,password,Patch,Plaintext,Project,Request,Security,Server-Side,Session,Signature,Software',
    ','
  )))
)
SELECT * FROM RawData;

SQL Server ( 2016+ )

WITH RawData(tag_name) AS (
  SELECT DISTINCT TRIM(value)
  FROM STRING_SPLIT(
    'Access,Admin,Algorithm,Application,Authentication,Backup,Broken,Brute,Code,Components,Control,Cryptographic,Data,Database,Default,Design,Digital,Error,Failures,Firewall,Force,Forgery,Framework,HTTP,HTTPS,ID,Identification,Injection,Insecure,Integrity,Library,Log,Logging,Login,Misconfiguration,Module,Monitoring,Open,Outdated,OWASP,password,Patch,Plaintext,Project,Request,Security,Server-Side,Session,Signature,Software',
    ','
  )
)
SELECT * FROM RawData;

BigQuery

WITH RawData AS (
  SELECT DISTINCT TRIM(tag) AS tag_name
  FROM UNNEST(SPLIT(
    'Access,Admin,Algorithm,Application,Authentication,Backup,Broken,Brute,Code,Components,Control,Cryptographic,Data,Database,Default,Design,Digital,Error,Failures,Firewall,Force,Forgery,Framework,HTTP,HTTPS,ID,Identification,Injection,Insecure,Integrity,Library,Log,Logging,Login,Misconfiguration,Module,Monitoring,Open,Outdated,OWASP,password,Patch,Plaintext,Project,Request,Security,Server-Side,Session,Signature,Software',
    ','
  )) AS tag
)
SELECT * FROM RawData;

Snowflake

WITH RawData AS (
  SELECT DISTINCT TRIM(f.value) AS tag_name
  FROM TABLE(FLATTEN(SPLIT(
    'Access,Admin,Algorithm,Application,Authentication,Backup,Broken,Brute,Code,Components,Control,Cryptographic,Data,Database,Default,Design,Digital,Error,Failures,Firewall,Force,Forgery,Framework,HTTP,HTTPS,ID,Identification,Injection,Insecure,Integrity,Library,Log,Logging,Login,Misconfiguration,Module,Monitoring,Open,Outdated,OWASP,password,Patch,Plaintext,Project,Request,Security,Server-Side,Session,Signature,Software',
    ','
  ))) AS f
)
SELECT * FROM RawData;

MySQL ( 8.0+ )

MySQL ไม่มี SPLIT แบบตรงตัว แนะนำใช้ JSON_TABLE

WITH RawData AS (
  SELECT DISTINCT TRIM(j.tag) AS tag_name
  FROM JSON_TABLE(
    '["Access","Admin","Algorithm","Application","Authentication","Backup","Broken","Brute","Code","Components","Control","Cryptographic","Data","Database","Default","Design","Digital","Error","Failures","Firewall","Force","Forgery","Framework","HTTP","HTTPS","ID","Identification","Injection","Insecure","Integrity","Library","Log","Logging","Login","Misconfiguration","Module","Monitoring","Open","Outdated","OWASP","password","Patch","Plaintext","Project","Request","Security","Server-Side","Session","Signature","Software"]',
    '$[*]' COLUMNS(tag VARCHAR(50) PATH '$')
  ) AS j
)
SELECT * FROM RawData;

💡 เคล็ดลับเพิ่มเติม

  1. ถ้าอยากคงรูปแบบ VALUES ไว้แต่ไม่อยากพิมพ์เอง:
    • ใช้ Excel/Google Sheets → วางรายการในคอลัมน์ A → คอลัมน์ B ใส่สูตร ="('"&A1&"')," → ลากลง → คัดลอกไปวางใน SQL
    • ใช้ VS Code: เลือกข้อความทั้งหมด → Ctrl+Shift+L → พิมพ์ ('End → พิมพ์ '),
  2. ถ้าข้อมูลยาวมากหรือเปลี่ยนบ่อย: ควรเก็บไว้ใน Table จริง ( tags_master ) หรืออ่านจาก CSV ( COPY / LOAD DATA INFILE ) จะดูแลง่ายกว่าระวังเคส: ตัวอย่างด้านบนคง TRIM และ DISTINCT ไว้ให้แล้ว ถ้าต้นทางสะอาดอยู่แล้ว สามารถลบออกได้เพื่อเพิ่มความเร็ว

อ่านเพิ่มเติม