Πώς να διαχωρίσετε μια συμβολοσειρά από έναν οριοθετημένο Char στον SQL Server;

Σε αυτό το άρθρο, θα συζητήσουμε διάφορους τρόπους για να διαιρέσουμε την οριοθετημένη τιμή συμβολοσειράς. Μπορεί να επιτευχθεί χρησιμοποιώντας πολλαπλές μεθόδους, συμπεριλαμβανομένων.

  • Χρήση της συνάρτησης STRING_SPLIT για διαχωρισμό της συμβολοσειράς
  • Δημιουργήστε μια συνάρτηση καθορισμένη από τον χρήστη συνάρτηση τιμής για να χωρίσετε τη συμβολοσειρά,
  • Χρησιμοποιήστε το XQuery για να διαιρέσετε την τιμή συμβολοσειράς και να μετατρέψετε μια οριοθετημένη συμβολοσειρά σε XML

Πρώτα απ 'όλα, πρέπει να δημιουργήσουμε έναν πίνακα και να εισαγάγουμε δεδομένα σε αυτόν που θα χρησιμοποιηθούν και στις τρεις μεθόδους. Ο πίνακας θα πρέπει να περιέχει μία μόνο σειρά με αναγνωριστικό πεδίου και συμβολοσειρά με χαρακτήρες οριοθέτησης. Δημιουργήστε έναν πίνακα με το όνομα "μαθητής" χρησιμοποιώντας τον ακόλουθο κωδικό.

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ μαθητή (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

Εισαγάγετε ονόματα μαθητών διαχωρισμένα με κόμματα σε μία σειρά εκτελώντας τον ακόλουθο κώδικα.

INSERT INTO student (student_name) ΑΞΙΕΣ («Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad»)

Βεβαιωθείτε ότι τα δεδομένα έχουν εισαχθεί στον πίνακα ή όχι χρησιμοποιώντας τον ακόλουθο κωδικό.

επιλέξτε * από μαθητή

Μέθοδος 1: Χρησιμοποιήστε τη συνάρτηση STRING_SPLIT για να διαχωρίσετε τη συμβολοσειρά

Στον SQL Server 2016, "STRING_SPLIT" Παρουσιάστηκε η λειτουργία που μπορεί να χρησιμοποιηθεί με επίπεδο συμβατότητας 130 και άνω. Εάν χρησιμοποιείτε την έκδοση SQL Server 2016 ή νεότερη, μπορείτε να χρησιμοποιήσετε αυτήν την ενσωματωμένη συνάρτηση.

Επί πλέον "STRING_SPLIT" εισάγει μια συμβολοσειρά που έχει οριοθετημένες υπο-συμβολοσειρές και εισάγει έναν χαρακτήρα για χρήση ως οριοθέτη ή διαχωριστικό. Η συνάρτηση εξάγει έναν πίνακα μίας στήλης του οποίου οι σειρές περιέχουν τις υπο-συμβολοσειρές. Το όνομα της στήλης εξόδου είναι "Αξία". Αυτή η συνάρτηση λαμβάνει δύο παραμέτρους. Η πρώτη παράμετρος είναι μια συμβολοσειρά και η δεύτερη είναι οριοθετικός χαρακτήρας ή διαχωριστής με βάση τον οποίο πρέπει να χωρίσουμε τη συμβολοσειρά. Η έξοδος περιέχει έναν πίνακα μίας στήλης στον οποίο υπάρχουν υποστρώματα. Αυτή η στήλη εξόδου ονομάζεται "Αξία" όπως μπορούμε να δούμε στο παρακάτω σχήμα. Επιπλέον, το "STRING SPLIT" Η συνάρτηση table_valued επιστρέφει έναν κενό πίνακα εάν η συμβολοσειρά εισόδου είναι NULL.

Επίπεδο συμβατότητας της βάσης δεδομένων:

Κάθε βάση δεδομένων συνδέεται με επίπεδο συμβατότητας. Επιτρέπει τη συμπεριφορά της βάσης δεδομένων να είναι συμβατή με τη συγκεκριμένη έκδοση του SQL Server στην οποία εκτελείται.

Τώρα θα καλέσουμε τη συνάρτηση "string_split" για να χωρίσουμε τη συμβολοσειρά που οριοθετείται από κόμματα. Όμως, το επίπεδο συμβατότητας ήταν μικρότερο από 130, συνεπώς αυξήθηκε το σφάλμα. "Μη έγκυρο όνομα αντικειμένου" SPLIT_STRING ""

Επομένως, πρέπει να ρυθμίσουμε το επίπεδο συμβατότητας της βάσης δεδομένων σε 130 ή υψηλότερο. Έτσι θα ακολουθήσουμε αυτά τα βήματα για να ορίσουμε το επίπεδο συμβατότητας της βάσης δεδομένων.

  • Πρώτα απ 'όλα ορίστε τη βάση δεδομένων σε "single_user_access_mode" χρησιμοποιώντας τον ακόλουθο κώδικα.
ALTER DATABASE SET SINGLE_USER
  • Δεύτερον, αλλάξτε το επίπεδο συμβατότητας της βάσης δεδομένων χρησιμοποιώντας τον ακόλουθο κώδικα.
ALTER DATABASE SET ΣΥΜΒΑΤΟΤΗΤΑ_LEVEL = 130
  • Επαναφέρετε τη βάση δεδομένων στη λειτουργία πρόσβασης πολλαπλών χρηστών χρησιμοποιώντας τον ακόλουθο κώδικα.
ALTER DATABASE SET MULTI_USER
ΧΡΗΣΗ [master] GO ALTER DATABASE [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

Η έξοδος θα είναι:

Τώρα εκτελέστε αυτόν τον κωδικό για να λάβετε το απαιτούμενο αποτέλεσμα.

ΔΗΛΩΣΗ @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' SELECT * FROM STRING_SPLIT (@string_value, ',')

Η έξοδος για αυτό το ερώτημα θα είναι:

Μέθοδος 2: Για να διαιρέσετε τη συμβολοσειρά, δημιουργήστε μια συνάρτηση που έχει καθοριστεί από τον χρήστη μια τιμή που αντιστοιχεί στον πίνακα

Βεβαίως, αυτή η παραδοσιακή μέθοδος υποστηρίζεται από όλες τις εκδόσεις του SQL Server. Σε αυτήν την τεχνική θα δημιουργήσουμε συνάρτηση που καθορίζεται από το χρήστη για να χωρίσουμε τη συμβολοσειρά με οριοθετημένο χαρακτήρα χρησιμοποιώντας "ΥΠΟΣΤΗΡΙΞΗ" λειτουργία, "ΧΑΡΙΝΔΕΞ"Και ενώ βρόχο. Αυτή η συνάρτηση μπορεί να χρησιμοποιηθεί για την προσθήκη δεδομένων στον πίνακα εξόδου καθώς ο τύπος επιστροφής της είναι "πίνακας".

ΔΗΜΙΟΥΡΓΙΑ ΛΕΙΤΟΥΡΓΙΑΣ [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) RETURNS @result_set TABLE (splited_data NVARCHAR (MAX)) BEGIN DECLARE @start_position INT, @pending_position INT, @pending @ending_position = CHARINDEX (@delimiter_character, @string_value) WHILE @start_position <LEN (@string_value) + 1 BEGIN IF @ending_position = 0 SET @ending_position = LEN (@string_value) + 1 INSERT INTO @result_set (splited_data) @string_value, @start_position, @ending_position - @start_position)) SET @start_position = @ending_position + 1 SET @ending_position = CHARINDEX (@delimiter_character, @string_value, @start_position) ΤΕΛΟΣ ΕΠΙΣΤΡΟΦΗ

Τώρα εκτελέστε το παρακάτω σενάριο για να καλέσετε μια συνάρτηση split για να διαχωρίσετε τη συμβολοσειρά με χαρακτήρα οριοθέτη

ΔΗΛΩΣΗ @student_name VARCHAR (MAX); ΔΗΛΩΣΗ @delimiter CHAR (1); SET @ delimiter = ',' SET @student_name = (SELECT student_name FROM student) SELECT * FROM dbo.split_string (@student_name, @delimiter)

Το σύνολο των αποτελεσμάτων θα είναι έτσι.

Μέθοδος 3: Χρησιμοποιήστε το XQuery για να διαιρέσετε την τιμή συμβολοσειράς και να μετατρέψετε μια οριοθετημένη συμβολοσειρά σε XML

Καθώς οι λειτουργίες που καθορίζονται από τον χρήστη είναι εξαντλητικοί πόροι, οπότε πρέπει να αποφύγουμε αυτές τις λειτουργίες. Μια άλλη επιλογή είναι η ενσωματωμένη συνάρτηση "string_split", αλλά αυτή η συνάρτηση μπορεί να χρησιμοποιηθεί για βάση δεδομένων για την οποία το επίπεδο συμβατότητας είναι 130 ή υψηλότερο. Εδώ λοιπόν έρχεται μια άλλη λύση για να επιλυθεί αυτό το δύσκολο έργο. Μια συμβολοσειρά μπορεί να χωριστεί χρησιμοποιώντας τα ακόλουθα XML.

ΔΗΛΩΣΗ @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Replace ( @string_value, @delimiter_value, ") +") AS XML) ΕΠΙΛΕΞΤΕ @xml_value

Η έξοδος για αυτό το ερώτημα θα είναι:

Εάν θέλετε να δείτε ολόκληρο το αρχείο XML. Κάντε κλικ στον σύνδεσμο. Μόλις κάνετε κλικ στον κωδικό συνδέσμου θα μοιάζει με αυτό.

Τώρα η συμβολοσειρά XML πρέπει να υποβληθεί σε περαιτέρω επεξεργασία. Τέλος, θα χρησιμοποιήσουμε το "x-Query" για να κάνετε ερώτημα από το XML.

ΔΗΛΩΣΗ @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Replace ( @string_value, @delimiter_value, '') + '' AS XML) SELECT xmquery ('.'). value ('.', 'VARCHAR (15)') AS VALUE FROM @ xml_value.nodes ('/ studentname') ) ΩΧ (μ) 

Η έξοδος θα είναι η εξής: