Οδηγοί

Πώς να χρησιμοποιήσετε το sql charindex () για αναζήτηση εντός συμβολοσειρών

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

Κατανόηση του τρόπου σωστής χρήσης CHARINDEX() μπορεί να βελτιώσει σημαντικά την αποτελεσματικότητα και την αναγνωσιμότητα του κώδικα SQL. Είναι ιδιαίτερα χρήσιμο όταν χειρίζεστε εργασίες όπως η ανάλυση των ακατέργαστων δεδομένων, η αναζήτηση λέξεων -κλειδιών στην είσοδο του χρήστη ή ακόμα και ο καθαρισμός των ασυνεπών καταχωρήσεων.

Τι είναι CHARINDEX();

Ο CHARINDEX() Η λειτουργία επιστρέφει τη θέση (ως ακέραιο) ενός συγκεκριμένου υποστρώματος μέσα σε μια μεγαλύτερη συμβολοσειρά. Εάν βρεθεί το υποσύνολο, επιστρέφει τη θέση του πρώτου περιστατικού ξεκινώντας από το 1. Εάν δεν βρεθεί, επιστρέφει 0.

Σύνταξη:

CHARINDEX ( expressionToFind , expressionToSearch ( , start_location ) )
  • έκφραση: Το υποσύνολο που ψάχνετε.
  • έκφραση: Η πλήρης συμβολοσειρά που θέλετε να αναζητήσετε μέσα.
  • start_location (Προαιρετικό): Η θέση στην κύρια συμβολοσειρά στην οποία θα ξεκινήσει η αναζήτηση.

Βασική χρήση του CHARINDEX()

Ακολουθεί ένα απλό παράδειγμα για να βρείτε τη θέση της λέξης “SQL” σε μια συμβολοσειρά:

SELECT CHARINDEX("SQL', 'Learn SQL with practice');

Αυτό θα επιστρέψει 7υποδεικνύοντας ότι το υποσύνολο “SQL” ξεκινά από την 7η θέση.

Χρήση CHARINDEX() με την προαιρετική θέση εκκίνησης

Μερικές φορές δεν θέλετε να ξεκινήσετε στην αρχή της συμβολοσειράς. Σε τέτοιες περιπτώσεις, μπορείτε να παρέχετε το προαιρετικό start_location επιχείρημα. Αυτό είναι χρήσιμο όταν θέλετε να βρείτε τη δεύτερη ή την τρίτη εμφάνιση ενός υποστρώματος.

SELECT CHARINDEX('is', 'This is interesting', 4);

Σε αυτή την περίπτωση, το πρώτο “IS” εμφανίζεται στη θέση 3, αλλά ξεκινώντας από τη θέση 4, παραλείπουμε αυτό και βρίσκουμε το δεύτερο περιστατικό στη θέση 6.

Η ευαισθησία των περιπτώσεων με CHARINDEX()

Αν CHARINDEX() Το είναι ευαίσθητο σε περιπτώσεις εξαρτάται από τις ρυθμίσεις συσχέτισης του διακομιστή SQL ή από τη συγκεκριμένη στήλη που αναζητείται. Για παράδειγμα, κάτω από μια μη ευαίσθητη σε περιπτώσεις καταδίκη όπως SQL_LATIN1_GENERAL_CP1_CI_ASη αναζήτηση για το «SQL» ή το «SQL» αποδίδει το ίδιο αποτέλεσμα. Σε μια ευαίσθητη σε περιπτώσεις ταξινόμηση, θα αντιμετωπίζονταν διαφορετικά.

Πρακτικό σενάριο: σειρές φιλτραρίσματος με βάση το υπόστρωμα

Μια πρακτική περίπτωση χρήσης του CHARINDEX() είναι όταν φιλτράρισμα σειρές πίνακα με βάση την τιμή μιας στήλης που περιέχει μια συγκεκριμένη λέξη.

SELECT * 
FROM Products 
WHERE CHARINDEX('Apple', ProductName) > 0;

Αυτό το ερώτημα επιστρέφει όλα τα προϊόντα όπου το όνομα περιλαμβάνει τη λέξη “Apple”.

Συνδυασμός CHARINDEX() με άλλες λειτουργίες

Συχνά, CHARINDEX() χρησιμοποιείται παράλληλα με λειτουργίες όπως SUBSTRING() Για να εξαγάγετε ένα τμήμα μιας συμβολοσειράς. Για παράδειγμα, εξαγωγή ενός ονόματος τομέα από μια διεύθυνση ηλεκτρονικού ταχυδρομείου:


SELECT SUBSTRING(Email, 
                 CHARINDEX('@', Email) + 1, 
                 LEN(Email)) AS Domain
FROM Users;

Αυτό εξάγει το τμήμα της διεύθυνσης ηλεκτρονικού ταχυδρομείου μετά το σύμβολο “@”.

Πλεονεκτήματα της χρήσης CHARINDEX()

  • Απλό στη χρήση και κατανόηση.
  • Υποστηρίζει προαιρετικές θέσεις εκκίνησης για ευέλικτες αναζητήσεις.
  • Εκτελεί αποτελεσματικά με αντιστοίχιση συμβολοσειρών όταν χρησιμοποιείται σωστά.

Περιορισμοί

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

Σύναψη

Ο CHARINDEX() Η λειτουργία είναι ένα πολύτιμο εργαλείο για κάθε προγραμματιστή SQL που ασχολείται με δεδομένα συμβολοσειράς. Είτε εκτελείτε βασικές αναζητήσεις είτε συνδυάζετε με άλλες λειτουργίες συμβολοσειράς για να δημιουργήσετε ισχυρά ερωτήματα, mastering CHARINDEX() θα ενισχύσει σημαντικά τις δυνατότητες δέσμης ενεργειών SQL.

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

  • Ε: Τι επιστρέφει το charindex () εάν δεν βρεθεί το υποσύνολο;
    Α: Επιστρέφει 0.
  • Ε: Μπορεί να χρησιμοποιηθεί το charindex () με τις στήλες σε μια ρήτρα όπου;
    Α: Ναι, χρησιμοποιείται συχνά για να φιλτράρει σειρές που περιέχουν συγκεκριμένα υποστρώματα.
  • Ε: Είναι το charindex () ευαίσθητο σε περιπτώσεις;
    Α: Εξαρτάται από τη συλλογή της βάσης δεδομένων ή της στήλης. Οι μη ευαίσθητες σε περιπτώσεις συσσωρεύσεις αντιμετωπίζουν το ‘SQL’ και το ‘SQL’ ως ίσες.
  • Ε: Πώς μπορώ να βρω τη δεύτερη εμφάνιση ενός υποστρώματος;
    Α: Χρησιμοποιήστε το προαιρετικό τρίτο επιχείρημα για να ξεκινήσετε την αναζήτηση αμέσως μετά τη θέση του πρώτου περιστατικού.
  • Ε: Ποια είναι η διαφορά μεταξύ του charIndex () και του patIndex ();
    A: Το CharIndex () αναζητά ακριβή υποστρώματα, ενώ το patIndex () επιτρέπει την αντιστοίχιση μοτίβων μπαλαντέρ.