PostgreSQL ฟังก์ชัน SUBSTRING() พร้อมตัวอย่าง Regex

⚡ สรุปอย่างชาญฉลาด

PostgreSQL ซับสตริง เช่นtracts เป็นฟังก์ชันที่ส่งคืนส่วนหนึ่งของสตริง โดยใช้ตำแหน่งเริ่มต้นและความยาวที่เป็นตัวเลือก และยังใช้การจับคู่ข้อความกับนิพจน์ปกติของ POSIX เพื่อดึงรูปแบบต่างๆ เช่น ตัวเลขหรือรหัสออกมา

  • 📋 ไวยากรณ์: substring( string [from start] [for length] ) คืนค่าส่วนหนึ่งของสตริงต้นฉบับ
  • 1️⃣ ตำแหน่ง: ตำแหน่งอักขระเริ่มต้นที่ 1 และหากไม่ระบุความยาว จะอ่านไปจนถึงจุดสิ้นสุดของสตริง
  • 🔎 เรเก็กซ์: SUBSTRING(string FROM pattern) ตัวอย่างเช่นtracts คือข้อความแรกที่ตรงกับนิพจน์ปกติของ POSIX
  • 🧮 กลุ่มping: กลุ่มที่อยู่ในวงเล็บในรูปแบบจะส่งคืนเฉพาะส่วนที่ตรงกันที่ถูกจับได้เท่านั้น
  • 🖥️ pgAdmin: การค้นหาสตริงย่อยทุกแบบทำงานในลักษณะเดียวกันภายในตัวแก้ไขแบบสอบถามของ pgAdmin
  • 🤖 ความช่วยเหลือจาก AI: ผู้ช่วย AI สร้างและอธิบายรูปแบบ regex เพื่อการแยกสตริงย่อยที่แม่นยำtraction

PostgreSQL ฟังก์ชัน SUBSTRING พร้อม Regex

ความหมายของ PostgreSQL สตริงย่อย?

การขอ PostgreSQL ฟังก์ชัน substring ช่วยให้คุณยกตัวอย่างได้tracฟังก์ชันนี้จะส่งคืนส่วนหนึ่งของสตริง แทนที่จะส่งคืนสตริงทั้งหมด ซึ่งมีประโยชน์สำหรับการตัดแต่งโค้ดและการอ่านฟิลด์ที่มีความกว้างคงที่

วากยสัมพันธ์

การขอ PostgreSQL ฟังก์ชัน substring มีรูปแบบดังต่อไปนี้:

substring( string [from starting_position] [for length] )

พารามิเตอร์

พารามิเตอร์ต่อไปนี้ใช้กับฟังก์ชัน substring:

เชือก สตริงต้นทางที่มีประเภทข้อมูลเป็น varchar, char, string ฯลฯ
การเริ่มต้น_ตำแหน่ง พารามิเตอร์เสริม ระบุตำแหน่งที่อดีตtracการประมวลผลสตริงจะเริ่มต้นขึ้น หากคุณละเว้นพารามิเตอร์นี้ ตัวอย่างจะไม่แสดงผลtraction เริ่มต้นจากตำแหน่งที่ 1 ซึ่งเป็นอักขระตัวแรกในสตริง
ความยาว พารามิเตอร์เสริม ระบุจำนวนอักขระที่จะส่งออกtracted จากสตริง หากคุณละเว้นพารามิเตอร์นี้ ฟังก์ชัน extracts จากตำแหน่งเริ่มต้นจนถึงจุดสิ้นสุดของสตริง

ตัวอย่าง

ในตัวอย่างนี้ เราต้องการยกตัวอย่างtracตัวอักษร 4 ตัวแรกจากคำ Guru99:

SELECT substring('Guru99' for 4);

คำสั่งจะส่งคืนสิ่งต่อไปนี้:

PostgreSQL สตริงย่อย

เราไม่ได้ระบุตำแหน่งเริ่มต้น ดังนั้น...tracการแยกส่วนย่อยเริ่มต้นที่ตำแหน่งที่ 1 มีอักขระสี่ตัวtracted จะส่งคืนค่าผลลัพธ์ข้างต้น

ตัวอย่างต่อไปนี้จะแสดงวิธีการระบุตำแหน่งเริ่มต้น:

SELECT substring('Guru99' from 1 for 4);

คำสั่งจะส่งคืนสิ่งต่อไปนี้:

PostgreSQL สตริงย่อย

เราได้ระบุว่าอดีตtracส่วนของสตริงย่อยควรเริ่มต้นจากตำแหน่งที่ 1 และควรมีอักขระอย่างน้อย 4 ตัวtracเท็ด

ลองยกตัวอย่างดูtract 99 จากสตริง Guru99:

SELECT substring('Guru99' from 5);

คำสั่งจะส่งคืนสิ่งต่อไปนี้:

PostgreSQL สตริงย่อย

เรากำหนดตำแหน่งเริ่มต้นเป็น 5 เนื่องจากจำนวนอักขระที่จะยกมานั้น...tracไม่ได้ระบุรายละเอียด อดีตtraction วิ่งไปจนสุดสาย

นี่เป็นอีกตัวอย่างหนึ่ง:

SELECT substring('Guru99' from 5 for 2);

คำสั่งจะส่งคืนสิ่งต่อไปนี้:

PostgreSQL สตริงย่อย

เราเริ่มต้นจากอดีตtracมีการแก้ไขที่ตำแหน่งที่ 5 และมีอักขระ 2 ตัวtracเท็ด

พิจารณาตารางหนังสือที่ระบุด้านล่าง:

PostgreSQL ตารางหนังสือสตริงย่อย

เราต้องการทราบชื่อคร่าวๆ ของหนังสือแต่ละเล่ม เราสามารถยกตัวอย่างได้tracเฉพาะ 15 ตัวอักษรแรกจากคอลัมน์ชื่อของตารางเท่านั้น:

SELECT
   id,
   SUBSTRING(name, 1, 15 ) AS name_initial
FROM
   Book
ORDER BY
   id;

คำสั่งจะส่งคืนสิ่งต่อไปนี้:

PostgreSQL ผลลัพธ์สตริงย่อย

ตอนนี้เรามีไอเดียคร่าวๆ เกี่ยวกับชื่อหนังสือทุกเล่มแล้ว

การจับคู่สตริงย่อยกับนิพจน์ปกติของ SQL

In PostgreSQLคุณสามารถยกตัวอย่างได้tracสตริงย่อยที่ตรงกับนิพจน์ปกติ POSIX ที่ระบุ ในกรณีนี้ ฟังก์ชัน substring ใช้ไวยากรณ์ดังต่อไปนี้:

SUBSTRING(string FROM matching_pattern)

or

SUBSTRING(string, matching_pattern);

ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ข้างต้น สตริงคือสตริงต้นฉบับ ซึ่งมี ประเภทข้อมูล ตัวแปรประเภท varchar, char, string และอื่นๆ matching_pattern คือรูปแบบที่ใช้ในการค้นหาในสตริง

ตัวอย่าง

SELECT
   SUBSTRING (
      'Your age is 22',
      '([0-9]{1,2})'
   ) as age;

คำสั่งจะส่งคืนสิ่งต่อไปนี้:

การจับคู่สตริงย่อยกับนิพจน์ปกติของ SQL

สตริงอินพุตของเราคือ "อายุของคุณคือ 22" ในรูปแบบการค้นหา เราจะค้นหารูปแบบตัวเลข เมื่อพบแล้ว ฟังก์ชันย่อย ex จะทำงานtracมีแค่สองตัวอักษรเท่านั้น

วิธีการจับคู่สตริงย่อยโดยใช้ pgAdmin

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

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2) ใน pgAdmin ให้คลิกไอคอนเครื่องมือค้นหา (Query Tool)

การจับคู่สตริงย่อยโดยใช้ pgAdmin

หน้าต่างตัวแก้ไขแบบสอบถามจะเปิดขึ้น

ขั้นตอน 3) พิมพ์คำสั่งต่อไปนี้ลงในช่องแก้ไขข้อความ

SELECT substring('Guru99' for 4);

ขั้นตอน 4) คลิกไอคอนดำเนินการเพื่อดำเนินการค้นหา

การจับคู่สตริงย่อยโดยใช้ pgAdmin

ขั้นตอน 5) การดำเนินการคิวรีเสร็จสิ้นแล้ว ผลลัพธ์ที่ได้ควรเป็นดังต่อไปนี้:

การจับคู่สตริงย่อยโดยใช้ pgAdmin

2 ตัวอย่าง:

SELECT substring('Guru99' from 1 for 4);

ควรส่งคืนสิ่งต่อไปนี้:

การจับคู่สตริงย่อยโดยใช้ pgAdmin

นี่คือตัวอย่างถัดไป:

SELECT substring('Guru99' from 5);

ควรส่งคืนสิ่งต่อไปนี้:

การจับคู่สตริงย่อยโดยใช้ pgAdmin

3 ตัวอย่าง:

SELECT substring('Guru99' from 5 for 2);

ควรส่งคืนสิ่งต่อไปนี้:

การจับคู่สตริงย่อยโดยใช้ pgAdmin

ตอนนี้ ให้เรารันตัวอย่างโดยใช้ตาราง Book ของฐานข้อมูล Demo:

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2) จากแถบนำทางด้านซ้าย คลิก ฐานข้อมูล จากนั้นคลิก สาธิต

การจับคู่สตริงย่อยโดยใช้ pgAdmin

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT
   id,
   SUBSTRING(name, 1, 15 ) AS name_initial
FROM
   Book
ORDER BY
   id;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

การจับคู่สตริงย่อยโดยใช้ pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

PostgreSQL ผลลัพธ์สตริงย่อย

ตอนนี้เรามีแนวคิดพื้นฐานเกี่ยวกับชื่อหนังสือทุกเล่มแล้ว

การจับคู่สตริงย่อยกับนิพจน์ปกติของ SQL

หากต้องการทำสิ่งเดียวกันบน pgAdmin ให้ทำดังต่อไปนี้:

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2) คลิกไอคอนเครื่องมือ Query

การจับคู่สตริงย่อยกับนิพจน์ปกติของ SQL

หน้าต่างตัวแก้ไขแบบสอบถามจะเปิดขึ้น

ขั้นตอน 3) พิมพ์คำสั่งต่อไปนี้ลงในช่องแก้ไขข้อความ

SELECT
   SUBSTRING (
      'Your age is 22',
      '([0-9]{1,2})'
   ) as age;

ขั้นตอน 4) คลิกไอคอนดำเนินการเพื่อดำเนินการค้นหา

การจับคู่สตริงย่อยกับนิพจน์ปกติของ SQL

ควรส่งคืนสิ่งต่อไปนี้:

การจับคู่สตริงย่อยกับนิพจน์ปกติของ SQL

ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้

คำถามที่พบบ่อย

SUBSTR เป็นชื่อย่อของ SUBSTRING และส่งคืนส่วนหนึ่งของสตริง SUBSTRING รองรับคำหลัก FROM และ FOR ตามมาตรฐาน SQL รวมถึงนิพจน์ปกติของ POSIX ในขณะที่ SUBSTR รับเฉพาะอาร์กิวเมนต์ตำแหน่งและความยาวที่คั่นด้วยเครื่องหมายจุลภาคเท่านั้น

PostgreSQL ฟังก์ชัน SUBSTRING เริ่มต้นจากตำแหน่งที่ 1 ดังนั้นอักขระตัวแรกจึงอยู่ที่ตำแหน่งที่ 1 ไม่ใช่ 0 การส่งค่าตำแหน่งเริ่มต้นที่ 1 จะคืนค่าสตริงตั้งแต่ตัวอักขระตัวแรกเป็นต้นไป

เมื่อรูปแบบ POSIX ไม่ตรงกับอะไรเลย ฟังก์ชัน SUBSTRING จะส่งคืนค่า NULL แทนที่จะเป็นสตริงว่าง การทดสอบผลลัพธ์ด้วย IS NULL ช่วยให้คุณจัดการกับแถวที่ไม่มีรูปแบบที่คาดหวังได้

ใช้ regular expression ที่จับสิ่งที่ตามหลังอักขระนั้น ตัวอย่างเช่น SUBSTRING(email FROM '@(.*)') จะคืนค่าทุกอย่างหลังเครื่องหมาย @ ซึ่งจะทำให้คุณได้ส่วนโดเมนของที่อยู่อีเมลแต่ละรายการ

ใช้ SUBSTRING เมื่อคุณต้องการข้อความที่ตรงกันตัวแรกเป็นค่าแบบง่ายๆ เลือกใช้ regexp_matches() เมื่อคุณต้องการให้ส่งคืนทุกข้อความที่ตรงกันหรือกลุ่มการจับคู่หลายกลุ่มเป็นอาร์เรย์ เนื่องจาก SUBSTRING จะส่งคืนเฉพาะข้อความที่ตรงกันตัวแรกเท่านั้น

ผู้ช่วย AI เช่น GitHub Copilot จะแปลงคำอธิบายภาษาอังกฤษธรรมดาให้เป็นรูปแบบ POSIX อธิบายว่าแต่ละโทเค็นตรงกับอะไร และแนะนำสตริงทดสอบ ซึ่งช่วยลดการลองผิดลองถูกเมื่อสร้างตัวอย่างสตริงย่อยtracคำถามเชิงทฤษฎี

ใช่แล้ว เพียงแค่ระบุส่วนของข้อความที่คุณต้องการ แล้วผู้ช่วย AI จะสร้างคำสั่ง SUBSTRING โดยใช้ตำแหน่งที่ถูกต้องหรือนิพจน์ปกติ ซึ่งคุณสามารถเรียกใช้และปรับแต่งเพิ่มเติมได้ภายใน pgAdmin

ใช่ การจับคู่ POSIX SUBSTRING นั้นคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กตามค่าเริ่มต้น หากต้องการจับคู่โดยไม่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ให้แปลงทั้งสองอินพุตเป็นตัวพิมพ์เล็ก เช่น SUBSTRING(lower(name) FROM lower(pattern)) เพื่อให้ตัวอักษรพิมพ์ใหญ่และตัวพิมพ์เล็กได้รับการปฏิบัติเหมือนกัน

สรุปโพสต์นี้ด้วย: