วิธีการแยกสตริงโดยใช้อักขระคั่นใน SQL Server



ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

ในบทความนี้เราจะพูดถึงหลายวิธีในการแยกค่าสตริงที่คั่น สามารถทำได้โดยใช้หลายวิธี ได้แก่



  • การใช้ฟังก์ชัน STRING_SPLIT เพื่อแยกสตริง
  • สร้างฟังก์ชันมูลค่าตารางที่ผู้ใช้กำหนดเพื่อแยกสตริง
  • ใช้ XQuery เพื่อแยกค่าสตริงและแปลงสตริงที่มีตัวคั่นเป็น XML

ก่อนอื่นเราต้องสร้างตารางและแทรกข้อมูลลงไปซึ่งจะใช้ทั้งสามวิธี ตารางควรมีแถวเดียวที่มีรหัสเขตข้อมูลและสตริงที่มีอักขระตัวคั่นอยู่ สร้างตารางชื่อ“ student” โดยใช้รหัสต่อไปนี้



สร้างตารางนักเรียน (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

แทรกชื่อนักเรียนคั่นด้วยลูกน้ำในแถวเดียวโดยเรียกใช้รหัสต่อไปนี้



INSERT INTO student (student_name) VALUES ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

การสร้างตารางและการแทรกข้อมูล

ตรวจสอบว่าข้อมูลถูกแทรกลงในตารางหรือไม่โดยใช้รหัสต่อไปนี้

เลือก * จากนักเรียน

ตรวจสอบว่าข้อมูลถูกแทรกลงในตาราง 'นักเรียน' หรือไม่



วิธีที่ 1: ใช้ฟังก์ชัน STRING_SPLIT เพื่อแยกสตริง

ใน SQL Server 2016 “ STRING_SPLIT” มีการแนะนำฟังก์ชันซึ่งสามารถใช้ได้กับความเข้ากันได้ระดับ 130 ขึ้นไป ถ้าคุณใช้ SQL Server เวอร์ชัน 2016 หรือสูงกว่าคุณสามารถใช้ฟังก์ชัน build-in นี้ได้

นอกจากนี้ “ STRING_SPLIT” ป้อนสตริงที่มีสตริงย่อยที่คั่นและป้อนอักขระหนึ่งตัวเพื่อใช้เป็นตัวคั่นหรือตัวคั่น ฟังก์ชันจะแสดงตารางคอลัมน์เดียวซึ่งแถวนั้นมีสตริงย่อย ชื่อของคอลัมน์ผลลัพธ์คือ“ มูลค่า” . ฟังก์ชันนี้ได้รับสองพารามิเตอร์ พารามิเตอร์ตัวแรกคือสตริงและพารามิเตอร์ตัวที่สองคือตัวคั่นหรือตัวคั่นตามที่เราต้องแยกสตริง เอาต์พุตประกอบด้วยตารางคอลัมน์เดียวซึ่งมีสตริงย่อยอยู่ คอลัมน์เอาต์พุตนี้มีชื่อว่า “ มูลค่า” ดังที่เราเห็นในรูปด้านล่าง ยิ่งไปกว่านั้น “ STRING SPLIT” ฟังก์ชัน table_valued ส่งคืนตารางว่างถ้าสตริงอินพุตเป็น NULL

ระดับความเข้ากันได้ของฐานข้อมูล:

แต่ละฐานข้อมูลคือเชื่อมต่อด้วยถึงความเข้ากันได้ระดับ.มันเปิดใช้งานที่ฐานข้อมูลพฤติกรรมถึงเป็นเข้ากันได้กับ thคือโดยเฉพาะSQLเซิร์ฟเวอร์รุ่นมันวิ่งบน.

ตอนนี้เราจะเรียกฟังก์ชัน 'string_split' เพื่อแยกสตริงที่คั่นด้วยเครื่องหมายจุลภาค แต่ระดับความเข้ากันได้น้อยกว่า 130 จึงเกิดข้อผิดพลาดตามมา 'ชื่อวัตถุไม่ถูกต้อง' SPLIT_STRING ''

เกิดข้อผิดพลาดหากระดับความเข้ากันได้ของฐานข้อมูลต่ำกว่า 130“ ชื่อวัตถุไม่ถูกต้อง split_string”

ดังนั้นเราต้องตั้งค่าระดับความเข้ากันได้ของฐานข้อมูลเป็น 130 หรือสูงกว่า ดังนั้นเราจะทำตามขั้นตอนเหล่านี้เพื่อตั้งค่าระดับความเข้ากันได้ของฐานข้อมูล

  • ก่อนอื่นตั้งฐานข้อมูลเป็น“ single_user_access_mode” โดยใช้รหัสต่อไปนี้
แก้ไขการตั้งค่าฐานข้อมูล SINGLE_USER
  • ประการที่สองเปลี่ยนระดับความเข้ากันได้ของฐานข้อมูลโดยใช้รหัสต่อไปนี้
แก้ไขชุดฐานข้อมูล COMPATIBILITY_LEVEL = 130
  • ทำให้ฐานข้อมูลกลับสู่โหมดการเข้าถึงหลายผู้ใช้โดยใช้รหัสต่อไปนี้
แก้ไขการตั้งค่าฐานข้อมูล MULTI_USER
ใช้ [หลัก] เปลี่ยนฐานข้อมูล [bridge_centrality] ตั้งค่า SINGLE_USER แก้ไขฐานข้อมูล [bridge_centrality] ตั้งค่า COMPATIBILITY_LEVEL = 130 แก้ไขฐานข้อมูล [bridge_centrality] ตั้งค่า MULTI_USER GO

ผลลัพธ์จะเป็น:

เปลี่ยนระดับความเข้ากันได้เป็น 130

ตอนนี้เรียกใช้รหัสนี้เพื่อให้ได้ผลลัพธ์ที่ต้องการ

ประกาศ @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' SELECT * จาก STRING_SPLIT (@string_value,