ฟังก์ชัน Substring() ใน SQL Server: วิธีใช้งานพร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
ฟังก์ชัน SUBSTRING() ใน SQL Server ตัวอย่างเช่นtracts คือส่วนหนึ่งของอักขระ ข้อความ หรือนิพจน์ไบนารี โดยจะส่งคืนอักขระจำนวนหนึ่งจากตำแหน่งเริ่มต้นที่เลือก และเข้ากันได้ดีกับ CHARINDEX สำหรับการแยกวิเคราะห์ตามตัวคั่น
สตริงย่อย () คืออะไร?
SUBSTRING() เป็นฟังก์ชันใน SQL ซึ่งช่วยให้ผู้ใช้สามารถสร้างสตริงย่อยจากสตริงที่กำหนดได้ตามต้องการ ตัวอย่างเช่น SUBSTRING()tracฟังก์ชัน `SUBSTRING()` ใน SQL ใช้สำหรับดึงสตริงที่มีความยาวตามที่กำหนด โดยเริ่มต้นจากตำแหน่งที่ระบุในสตริงอินพุต จุดประสงค์ของฟังก์ชัน `SUBSTRING()` ใน SQL คือการดึงส่วนเฉพาะของสตริงออกมา
ไวยากรณ์สำหรับสตริงย่อย ()
SUBSTRING(Expression, Starting Position, Total Length)
ที่นี่:
- นิพจน์ SUBSTRING() ใน SQL Server สามารถเป็นอักขระใดๆ ก็ได้ ไม่ว่าจะเป็นเลขฐานสอง ข้อความ หรือรูปภาพ นิพจน์คือสตริงต้นฉบับที่จะดึงสตริงย่อยออกมา
- ตำแหน่งเริ่มต้นจะกำหนดตำแหน่งในนิพจน์ที่สตริงย่อยใหม่ควรเริ่มต้น
- ความยาวทั้งหมด คือความยาวที่คาดหวังทั้งหมดของสตริงย่อยที่ได้จากนิพจน์ โดยเริ่มจากตำแหน่งเริ่มต้น
กฎการใช้ SUBSTRING()
- ฟังก์ชัน SUBSTRING() ของ MS SQL ต้องระบุอาร์กิวเมนต์ทั้งสามตัว
- หากตำแหน่งเริ่มต้นมากกว่าจำนวนอักขระสูงสุดในนิพจน์ ฟังก์ชัน SUBSTRING() ใน SQL Server จะไม่ส่งค่าใดๆ กลับมา
- ความยาวรวมอาจเกินความยาวอักขระสูงสุดของสตริงเดิม ในกรณีนี้ สตริงย่อยที่ได้จะเป็นสตริงทั้งหมด โดยเริ่มจากตำแหน่งเริ่มต้นในนิพจน์จนถึงอักขระสุดท้ายของนิพจน์
แผนภาพด้านล่างแสดงการใช้งานฟังก์ชัน SUBSTRING() ใน SQL Server:
ตัวอย่างสตริงย่อย T-SQL
ข้อสมมติฐาน: สมมติว่าเรามีตารางชื่อ 'Guruตาราง 99 ที่มีสองคอลัมน์และสี่แถว ดังแสดงด้านล่าง เราจะใช้ตารางนี้ 'Guruตาราง 99 ในตัวอย่างต่อไปนี้:
คำถามที่ 1: การใช้ฟังก์ชัน SUBSTRING() ใน SQL กับความยาวที่น้อยกว่าความยาวสูงสุดทั้งหมดของนิพจน์
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
ผลลัพธ์: แผนภาพด้านล่างแสดงสตริงย่อยของคอลัมน์ 'Tutorial_name' เป็นคอลัมน์ 'SUB' โดยตำแหน่งเริ่มต้นคือ 1 และความยาวคือ 2 ดังนั้นจึงส่งคืนอักขระสองตัวแรก:
คำถามที่ 2: การใช้ฟังก์ชัน SUBSTRING() ใน SQL Server กับความยาวที่มากกว่าความยาวสูงสุดทั้งหมดของนิพจน์
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
ผลลัพธ์: แผนภาพด้านล่างแสดงสตริงย่อยของคอลัมน์ 'Tutorial_name' เป็นคอลัมน์ 'SUB' แม้ว่าความยาวของสตริงย่อยจะมากกว่าความยาวสูงสุดทั้งหมดของนิพจน์ แต่ก็ไม่มีข้อผิดพลาดเกิดขึ้น และแบบสอบถามจะส่งคืนสตริงเต็มตั้งแต่ตำแหน่งเริ่มต้นเป็นต้นไป:
ฟังก์ชัน SUBSTRING ร่วมกับ CHARINDEX ใน SQL Server
การใช้งาน SUBSTRING() ในโลกแห่งความเป็นจริงที่พบได้บ่อยมากอย่างหนึ่งคือการยกตัวอย่างtracข้อความที่อยู่ก่อนหรือหลังตัวคั่น เช่น โดเมนในที่อยู่อีเมล โดยปกติแล้ว ฟังก์ชัน SUBSTRING() ต้องการตำแหน่งเริ่มต้นที่แน่นอน แต่ตำแหน่งของตัวคั่นจะแตกต่างกันไปในแต่ละแถว ฟังก์ชัน CHARINDEX() แก้ปัญหานี้ได้โดยการส่งคืนตำแหน่งของอักขระภายในสตริง:
CHARINDEX(substring_to_find, expression [, start_location])
การใช้ CHARINDEX() ซ้อนอยู่ภายใน SUBSTRING() ทำให้ตำแหน่งเริ่มต้นเปลี่ยนแปลงได้ ตัวอย่างด้านล่างจะค้นหา... @ สัญลักษณ์และส่งคืนทุกอย่างที่อยู่หลังจากนั้น A ตัวแปร เก็บค่าตัวอย่างไว้:
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
ในที่นี้ CHARINDEX('@', @Email) จะค้นหาตำแหน่งของสัญลักษณ์ @ การเพิ่ม 1 จะเลื่อนเลยไป และจากนั้น SUBSTRING() จะแสดงผลtracts คืออักขระที่เหลือ สำหรับค่าข้างต้น การค้นหาจะส่งคืนโดเมน guru99.comรูปแบบ CHARINDEX-plus-SUBSTRING นี้เป็นวิธีการมาตรฐานในการแยกวิเคราะห์สตริงที่มีโครงสร้างใน T-SQL
SUBSTRING เทียบกับ LEFT และ RIGHT ใน SQL Server
SQL Server ยังมีฟังก์ชัน LEFT() และ RIGHT() สำหรับดึงอักขระจากต้นหรือท้ายสตริง ฟังก์ชันเหล่านี้เขียนได้สั้นกว่า แต่จำกัดเฉพาะปลายทั้งสองด้านเท่านั้น ฟังก์ชัน SUBSTRING() มีความยืดหยุ่นมากที่สุดเพราะสามารถเริ่มต้นที่ตำแหน่งใดก็ได้ ตารางด้านล่างเปรียบเทียบฟังก์ชันทั้งสอง:
| ฟังก์ชัน | ข้อโต้แย้ง | Extracts จาก | เทียบเท่ากับ SUBSTRING() |
| LEFT(expression, n) | 2 | จุดเริ่มต้นของสตริง | SUBSTRING(expression, 1, n) |
| ถูกต้อง(นิพจน์, n) | 2 | สิ้นสุดสตริง | SUBSTRING(expression, LEN(expression) – n + 1, n) |
| SUBSTRING(expression, start, length) | 3 | ตำแหน่งใดก็ได้ | ไม่สามารถใช้งาน |
โดยสรุปแล้ว ฟังก์ชัน LEFT() และ RIGHT() เป็นทางลัดที่สะดวกสำหรับการดึงข้อมูลจากส่วนปลายของสตริง ในขณะที่ฟังก์ชัน SUBSTRING() จะจัดการกรณีทั่วไป รวมถึงอักขระที่ดึงมาจากตรงกลางด้วย
อาร์กิวเมนต์ที่เป็นค่าลบ ศูนย์ และ NULL ในฟังก์ชัน SUBSTRING
นอกเหนือจากกฎพื้นฐานแล้ว การเข้าใจพฤติกรรมของ SUBSTRING() ที่ขอบก็เป็นประโยชน์เช่นกัน เมื่อตำแหน่งเริ่มต้นเป็นศูนย์หรือติดลบ SQL Server จะคำนวณความยาวที่มีประสิทธิภาพเป็น (start + length – 1) และเริ่มอ่านจากตำแหน่งที่หนึ่ง เมื่ออาร์กิวเมนต์ใด ๆ เป็น NULL ผลลัพธ์จะเป็น NULL ตารางด้านล่างนี้ได้รับการตรวจสอบกับข้อมูลอย่างเป็นทางการแล้ว การตัดสตริง (Transact-SQL) เอกสารอ้างอิงนี้แสดงกรณีต่างๆ ดังนี้:
| โทร | ผล | เหตุผล |
| ซับสตริง('Guru99', 1, 4) | Guru | การเรียกแบบปกติ: อักขระสี่ตัวจากตำแหน่งที่หนึ่ง |
| ซับสตริง('Guru99', 0, 3) | Gu | เริ่มต้นจากด้านล่างหนึ่ง: ความยาวที่มีประสิทธิภาพคือ 0 + 3 – 1 = 2 |
| ซับสตริง('Guru99', 4, 100) | u99 | ความยาวที่เกินสตริงจะคืนค่าส่วนที่เหลือโดยไม่มีข้อผิดพลาด |
| ซับสตริง('Guru99', 3, NULL) | NULL | อาร์กิวเมนต์ที่เป็นค่า NULL จะทำให้ผลลัพธ์ทั้งหมดเป็น NULL เช่นกัน |
การทราบกรณีพิเศษเหล่านี้จะช่วยป้องกันความประหลาดใจเมื่อคำนวณตำแหน่งเริ่มต้นจากคอลัมน์อื่นหรือ ตัวแปร ซึ่งอาจเป็นศูนย์หรือค่าว่าง (NULL)





