Substring() στον SQL Server: Πώς να χρησιμοποιήσετε με παράδειγμα
⚡ Έξυπνη Σύνοψη
SUBSTRING() σε SQL Server extracts ένα τμήμα ενός χαρακτήρα, κειμένου ή δυαδικής έκφρασης, επιστρέφοντας έναν καθορισμένο αριθμό χαρακτήρων από μια επιλεγμένη αρχική θέση και συνδυάζεται φυσικά με το CHARINDEX για ανάλυση που βασίζεται σε οριοθέτες.

Τι είναι το 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:
Παραδείγματα υποσυμβολοσειράς T-SQL
Υπόθεση: Ας υποθέσουμε ότι έχουμε έναν πίνακα με όνομα 'Guru99' με δύο στήλες και τέσσερις γραμμές, όπως φαίνεται παρακάτω. Θα χρησιμοποιήσουμε αυτό το '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'. Παρόλο που το μήκος της δευτερεύουσας συμβολοσειράς είναι μεγαλύτερο από το συνολικό μέγιστο μήκος της έκφρασης, δεν προκύπτει σφάλμα και το ερώτημα επιστρέφει την πλήρη συμβολοσειρά από την αρχική θέση και μετά:
ΥΠΟΣΥΜΒΟΛΟ με 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.




