Αναζήτηση σειρών με ειδικούς χαρακτήρες στον SQL Server
Κατά την επίλυση ενός προβλήματος προγραμματισμού σήμερα, παρατήρησα ότι δεν μπορείτε να χρησιμοποιήσετε μια αναζήτηση LIKE για στήλες συμβολοσειρών που περιέχουν ειδικούς χαρακτήρες όπως% ή _ χωρίς να χρησιμοποιήσετε μια ειδική σύνταξη. Η εκτίμηση του προβλήματος απέδωσε μόνο λίγα λεπτά, αλλά η ανάμνηση σύνταξης είναι πάντα ευκολότερη αν γράψετε γι 'αυτό.
Έτσι ναι, αυτή η θέση είναι αποκλειστικά προς όφελός μου. Ας ελπίσουμε ότι θα βοηθήσει και κάποιον άλλο.
Ας υποθέσουμε ότι θέλετε να βρείτε πεδία που περιέχουν το κείμενο "100%", ώστε να δημιουργήσετε το ερώτημα αυτό:
SELECT * FROM όνομα_καταλόγου WHERE fieldname LIKE '% 100 %%'
Αντί αυτού που θέλατε, θα πάρετε όλες τις σειρές που περιέχουν "100" καθώς και τις σειρές που περιέχουν "100%".
Το πρόβλημα εδώ είναι ότι ο SQL Server χρησιμοποιεί το σύμβολο ποσοστού, την υπογράμμιση και τις αγκύλες ως ειδικούς χαρακτήρες. Απλώς δεν μπορείτε να τα χρησιμοποιήσετε ως απλό χαρακτήρα σε ένα ερώτημα LIKE χωρίς να το διαφύγετε.
Απαγόρευση τετράγωνου βραχίονα
Μπορείτε να περιβάλλετε το% ή _ με αγκύλες για να ενημερώσετε τον SQL Server ότι ο χαρακτήρας μέσα είναι κανονικός χαρακτήρας.
SELECT * FROM όνομα_καταλόγου WHERE όνομα_αναφοράς LIKE '% 100 [%]%'
Σύνταξη T-SQL ESCAPE
Εναλλακτικά, μπορείτε να προσαρτήσετε τον χειριστή ESCAPE στο ερώτημά σας και να προσθέσετε έναν χαρακτήρα πριν από την τιμή που θέλετε να ξεφύγετε.
SELECT * FROM όνομα πίνακα WHERE όνομα τομέα LIKE '% 100 \ %%' ESCAPE '\'
Το τμήμα του ερωτήματος ESCAPE του ερωτήματος λέει στη μηχανή SQL την ερμηνεία του χαρακτήρα μετά τον \ ως κυριολεκτικό χαρακτήρα αντί για το wildcard.
Προσωπικά βρίσκω τη δεύτερη μέθοδο πιο εύκολη και μπορείτε να την χρησιμοποιήσετε για να ξεφύγετε από ένα τετράγωνο βραχίονα επίσης.