Substring() στον SQL Server: Πώς να χρησιμοποιήσετε με παράδειγμα

⚡ Έξυπνη Σύνοψη

SUBSTRING() σε SQL Server extracts ένα τμήμα ενός χαρακτήρα, κειμένου ή δυαδικής έκφρασης, επιστρέφοντας έναν καθορισμένο αριθμό χαρακτήρων από μια επιλεγμένη αρχική θέση και συνδυάζεται φυσικά με το CHARINDEX για ανάλυση που βασίζεται σε οριοθέτες.

  • Σκοπός: Η συνάρτηση SUBSTRING() επιστρέφει ένα συγκεκριμένο τμήμα μιας συμβολοσειράς, δεδομένης της έκφρασης πηγής, μιας αρχικής θέσης και ενός μήκους.
  • 🔢 Τρία επιχειρήματα: Η έκφραση, η αρχική θέση και το συνολικό μήκος είναι όλα υποχρεωτικά στη συνάρτηση SQL Server SUBSTRING().
  • 📍 Ευρετήριο με βάση ένα μόνο: Η αρχική θέση βασίζεται στο 1, επομένως ο πρώτος χαρακτήρας μετράει ως η θέση ένα, γεγονός που αποτρέπει τα λάθη εκτός σειράς.
  • 🔎 Με το CHARINDEX: Η σύζευξη της SUBSTRING() με την CHARINDEX() εντοπίζει έναν οριοθέτη και π.χ.tracts το κείμενο πριν ή μετά από αυτό.
  • ↔️ Έναντι ΑΡΙΣΤΕΡΑ και ΔΕΞΙΑ: Σε αντίθεση με τις LEFT() και RIGHT(), η SUBSTRING() π.χ.tracts χαρακτήρες από οποιαδήποτε θέση, όχι μόνο από τα άκρα.
  • ⚠️ Περιπτώσεις ακμής: Ένα μήκος NULL επιστρέφει NULL, ενώ ένα μήκος πέρα ​​από τη συμβολοσειρά επιστρέφει το υπόλοιπο χωρίς να προκαλεί σφάλμα.

Συνάρτηση SUBSTRING() στον SQL Server με παραδείγματα T-SQL

Τι είναι το Substring();

Η SUBSTRING() είναι μια συνάρτηση στο SQL που επιτρέπει στον χρήστη να εξάγει μια δευτερεύουσα συμβολοσειρά από οποιαδήποτε δεδομένη συμβολοσειρά ανάλογα με τις ανάγκες. SUBSTRING() π.χ.tracts είναι μια συμβολοσειρά συγκεκριμένου μήκους, που ξεκινά από μια δεδομένη θέση σε μια συμβολοσειρά εισόδου. Ο σκοπός της SUBSTRING() στην SQL είναι να επιστρέψει ένα συγκεκριμένο τμήμα της συμβολοσειράς.

Σύνταξη για Substring()

SUBSTRING(Expression, Starting Position, Total Length)

Εδώ:

  • Η έκφραση SUBSTRING() στο Ο SQL Server μπορεί να είναι οποιοσδήποτε χαρακτήρας, δυαδικό αρχείο, κείμενο ή εικόνα. Η έκφραση είναι η συμβολοσειρά προέλευσης από την οποία ανακτάται η δευτερεύουσα συμβολοσειρά.
  • Η Αρχική Θέση καθορίζει τη θέση στην Έκφραση από την οποία θα πρέπει να ξεκινήσει η νέα δευτερεύουσα συμβολοσειρά.
  • Το Συνολικό Μήκος είναι το συνολικό αναμενόμενο μήκος της υποσυμβολοσειράς που προκύπτει από την Έκφραση, ξεκινώντας από την Αρχική Θέση.

Κανόνες χρήσης SUBSTRING()

  • Και τα τρία ορίσματα είναι υποχρεωτικά στη συνάρτηση MS SQL SUBSTRING().
  • Εάν η Αρχική Θέση είναι μεγαλύτερη από τον μέγιστο αριθμό χαρακτήρων στην Έκφραση, τότε δεν επιστρέφεται τίποτα από τη συνάρτηση SUBSTRING() στον SQL Server.
  • Το Συνολικό Μήκος μπορεί να υπερβαίνει το μέγιστο μήκος χαρακτήρων της αρχικής συμβολοσειράς. Σε αυτήν την περίπτωση, η δευτερεύουσα συμβολοσειρά που προκύπτει είναι ολόκληρη η συμβολοσειρά, ξεκινώντας από την Αρχική Θέση στην Έκφραση μέχρι τον τελευταίο χαρακτήρα της Έκφρασης.

Το παρακάτω διάγραμμα απεικονίζει τη χρήση της συνάρτησης SUBSTRING() στον SQL Server:

Διάγραμμα που δείχνει πώς η SUBSTRING() extracts χαρακτήρες από μια αρχική θέση για ένα δεδομένο μήκος

Παραδείγματα υποσυμβολοσειράς T-SQL

Υπόθεση: Ας υποθέσουμε ότι έχουμε έναν πίνακα με όνομα 'Guru99' με δύο στήλες και τέσσερις γραμμές, όπως φαίνεται παρακάτω. Θα χρησιμοποιήσουμε αυτό το 'Guruπίνακα 99' στα ακόλουθα παραδείγματα:

Guru99 δείγμα πίνακα με στήλες Tutorial_ID και Tutorial_name που χρησιμοποιούνται στα παραδείγματα SUBSTRING

Ερώτημα 1: SUBSTRING() σε SQL με μήκος μικρότερο από το συνολικό μέγιστο μήκος της έκφρασης.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

Αποτέλεσμα: Το παρακάτω διάγραμμα εμφανίζει την υποσυμβολοσειρά της στήλης 'Tutorial_name' ως στήλη 'SUB'. Η αρχική θέση είναι 1 και το μήκος είναι 2, επομένως επιστρέφονται οι δύο πρώτοι χαρακτήρες:

Πλέγμα αποτελεσμάτων που επιστρέφει τους δύο πρώτους χαρακτήρες του Tutorial_name ως στήλη SUB

Ερώτημα 2: SUBSTRING() στον SQL Server με μήκος μεγαλύτερο από το συνολικό μέγιστο μήκος της έκφρασης.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

Αποτέλεσμα: Το παρακάτω διάγραμμα εμφανίζει τη δευτερεύουσα συμβολοσειρά της στήλης 'Tutorial_name' ως τη στήλη 'SUB'. Παρόλο που το μήκος της δευτερεύουσας συμβολοσειράς είναι μεγαλύτερο από το συνολικό μέγιστο μήκος της έκφρασης, δεν προκύπτει σφάλμα και το ερώτημα επιστρέφει την πλήρη συμβολοσειρά από την αρχική θέση και μετά:

Το πλέγμα αποτελεσμάτων επιστρέφει το υπόλοιπο του Tutorial_name όταν το ζητούμενο μήκος υπερβαίνει τη συμβολοσειρά

ΥΠΟΣΥΜΒΟΛΟ με CHARINDEX στον SQL Server

Μια πολύ συνηθισμένη χρήση της SUBSTRING() στον πραγματικό κόσμο είναι η π.χ.tracκείμενο που βρίσκεται πριν ή μετά από έναν οριοθέτη, όπως ο τομέας σε μια διεύθυνση ηλεκτρονικού ταχυδρομείου. Από μόνη της, η συνάρτηση SUBSTRING() χρειάζεται μια σταθερή αρχική θέση, αλλά η θέση ενός οριοθέτη ποικίλλει από γραμμή σε γραμμή. Η συνάρτηση CHARINDEX() λύνει αυτό το πρόβλημα επιστρέφοντας τη θέση ενός χαρακτήρα μέσα σε μια συμβολοσειρά:

CHARINDEX(substring_to_find, expression [, start_location])

Ενσωματώνοντας την CHARINDEX() μέσα στην SUBSTRING(), η αρχική θέση γίνεται δυναμική. Το παρακάτω παράδειγμα βρίσκει την @ σύμβολο και επιστρέφει όλα όσα ακολουθούν. Ένα μεταβλητή διατηρεί την τιμή του δείγματος:

DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com';
SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;

Εδώ, η CHARINDEX('@', @Email) εντοπίζει τη θέση του συμβόλου @, προσθέτοντας 1 μετακινείται πέρα ​​από αυτό, και SUBSTRING() και στη συνέχεια extracts τους υπόλοιπους χαρακτήρες. Για την παραπάνω τιμή, το ερώτημα επιστρέφει τον τομέα guru99.comΑυτό το μοτίβο CHARINDEX-plus-SUBSTRING είναι ο τυπικός τρόπος για την ανάλυση δομημένων συμβολοσειρών σε T-SQL.

ΥΠΟΣΥΜΒΟΛΟ vs ΑΡΙΣΤΕΡΑ και ΔΕΞΙΑ στον SQL Server

Ο SQL Server παρέχει επίσης τις συναρτήσεις LEFT() και RIGHT() για την εξαγωγή χαρακτήρων από την αρχή ή το τέλος μιας συμβολοσειράς. Είναι πιο σύντομες στην εγγραφή, αλλά περιορίζονται στα δύο άκρα. Η SUBSTRING() είναι η πιο ευέλικτη επειδή μπορεί να ξεκινήσει από οποιαδήποτε θέση. Ο παρακάτω πίνακας τις συγκρίνει:

Λειτουργία Επιχειρήματα Extracts από Ισοδύναμη ΥΠΟΣΤΡΑΒΓΗ()
LEFT(έκφραση, n) 2 Έναρξη της χορδής ΥΠΟΣΤΡΑΒΓΗ(έκφραση, 1, n)
ΔΕΞΙΑ(έκφραση, n) 2 Τέλος της χορδής ΥΠΟΣΤΡΑΒΓΗ(έκφραση, LEN(έκφραση) – n + 1, n)
ΥΠΟΣΤΡΑΒΓΗ(έκφραση, έναρξη, μήκος) 3 Οποιαδήποτε θέση δεν ισχύει

Εν ολίγοις, οι συναρτήσεις LEFT() και RIGHT() είναι βολικές συντομεύσεις για τα άκρα μιας συμβολοσειράς, ενώ η συνάρτηση SUBSTRING() χειρίζεται τη γενική πεζά-κεφαλαία, συμπεριλαμβανομένων των χαρακτήρων που λαμβάνονται από τη μέση.

Αρνητικά, Μηδενικά και NULL ορίσματα σε SUBSTRING

Πέρα από τους βασικούς κανόνες, βοηθάει να γνωρίζουμε πώς συμπεριφέρεται η συνάρτηση SUBSTRING() στις άκρες. Όταν η αρχική θέση είναι μηδέν ή αρνητική, ο SQL Server υπολογίζει ένα αποτελεσματικό μήκος (έναρξη + μήκος – 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.

Συχνές Ερωτήσεις

Ο SQL Server χρησιμοποιεί SUBSTRING(). Το όνομα που χρησιμοποιείται είναι SUBSTR(). Oracle και MySQLΚαι οι δύο επιστρέφουν ένα τμήμα μιας συμβολοσειράς, αλλά η SUBSTRING() είναι η τυπική συνάρτηση Transact-SQL, επομένως η SUBSTR() δεν θα εκτελεστεί στον SQL Server.

Ναι. Επειδή η συνάρτηση SUBSTRING() επιστρέφει μια τιμή, αυτή μπορεί να εμφανιστεί στις ρήτρες WHERE, SELECT και ORDER BY. Το φιλτράρισμα με τη συνάρτηση SUBSTRING() συνήθως αποτρέπει την αναζήτηση σε ευρετήριο, επομένως ένα μοτίβο LIKE είναι συχνά πιο γρήγορο για αναζητήσεις προθέματος.

Ναι, αλλά ο SQL Server μετατρέπει πρώτα την τιμή σε συμβολοσειρά, είτε έμμεσα είτε μέσω CAST ή CONVERT. Η αρχική θέση και το μήκος μετρούν στη συνέχεια χαρακτήρες και όχι ψηφία ή τμήματα ημερομηνίας, επομένως μορφοποιήστε την τιμή προσεκτικά.

Η μορφή τριών ορισμάτων συμπεριφέρεται παρόμοια, αλλά οι λεπτομέρειες διαφέρουν. MySQL Επιτρέπει επίσης τη συνάρτηση SUBSTR() και αρνητικές αρχικές θέσεις, ενώ ο SQL Server χρησιμοποιεί τη συνάρτηση SUBSTRING() και αντιμετωπίζει μια έναρξη κάτω από τη μονάδα χρησιμοποιώντας έναν κανόνα αποτελεσματικού μήκους.

Η συνάρτηση SUBSTRING() επιστρέφει την ίδια κατηγορία με την είσοδό της: varchar για δεδομένα χαρακτήρων, nvarchar για κείμενο Unicode και varbinary για δυαδικές εκφράσεις. Το μήκος εξαρτάται από την ζητούμενη δευτερεύουσα συμβολοσειρά, όχι από ολόκληρη τη στήλη πηγής.

Τυλίξτεping Μια στήλη στη συνάρτηση SUBSTRING() μέσα σε μια ρήτρα WHERE καθιστά το κατηγόρημα μη-sargable, επομένως ο SQL Server δεν μπορεί να χρησιμοποιήσει μια αναζήτηση ευρετηρίου σε αυτήν τη στήλη. Για αντιστοιχίσεις προθέματος, ένα μοτίβο LIKE 'value%' συνήθως αποδίδει καλύτερα.

Ναί. GitHub Copilot μπορεί να σχεδιάσει εκφράσεις SUBSTRING() και CHARINDEX(), συμπεριλαμβανομένης της ανάλυσης που βασίζεται σε οριοθέτες, από μια προτροπή φυσικής γλώσσας. Πάντα να επαληθεύετε την αρχική θέση, το μήκος και την ευρετηρίαση που βασίζεται σε 1 πριν εκτελέσετε το ερώτημα.

Οι βοηθοί τεχνητής νοημοσύνης και μηχανικής μάθησης μεταφράζουν κανόνες σε απλά αγγλικά σε συνδυασμούς SUBSTRING(), CHARINDEX(), LEFT() και RIGHT(), προτείνουν υπολογισμούς μήκους και επισημαίνουν σφάλματα "off-by-one". Ο προγραμματιστής εξετάζει κάθε πρόταση για ορθότητα πριν την αναπτύξει.

Συνοψίστε αυτήν την ανάρτηση με: