SQLite Λειτουργίες συμβολοσειράς: REPLACE, SUBSTR, TRIM, ROUND
SQLite είναι εξ ορισμού εξοπλισμένο με μια λίστα ενσωματωμένων λειτουργιών εντός του SQLite βιβλιοθήκη. Μπορείτε επίσης να προσθέσετε κάποιες άλλες προσαρμοσμένες συναρτήσεις χρησιμοποιώντας τη γλώσσα C για να επεκτείνετε τις βασικές λειτουργίες.
Σημειώστε ότι, για όλα τα ακόλουθα παραδείγματα, πρέπει να εκτελέσετε το sqlite3.exe και να ανοίξετε μια σύνδεση με το δείγμα βάσης δεδομένων ως ρέουσα:
Βήμα 1) Στο στάδιο αυτό,
- Ανοίξτε τον Υπολογιστή μου και μεταβείτε στον ακόλουθο κατάλογο "C:\sqlite" και μετά
- Άνοιξε "sqlite3.exe"
Βήμα 2) Ανοίξτε τη βάση δεδομένων "TutorialsSampleDB.db” με την ακόλουθη εντολή:
Τώρα είστε έτοιμοι να εκτελέσετε οποιοδήποτε απορία και δοκιμάστε τυχόν ερωτήματα που χρησιμοποιούνται στις ακόλουθες ενότητες.
Εύρεση μήκους συμβολοσειράς μέσα SQLite
Για να βρείτε το μήκος μιας συμβολοσειράς χρησιμοποιήστε το LENGTH(X) όπου το X είναι μια τιμή συμβολοσειράς. Εάν το X είναι μηδενική τιμή, η συνάρτηση μήκους θα επιστρέψει μηδενική τιμή.
Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση μήκους με αριθμητικές τιμές για να λάβετε το μήκος της αριθμητικής τιμής.
Παράδειγμα:
Στο παρακάτω παράδειγμα, θα δοκιμάσουμε τη σύνταξη της συνάρτησης LENGTH με τις ακόλουθες τιμές:
SELECT LENGTH('A string'), LENGTH(NULL), LENGTH(20), LENGTH(20.5);
Αυτό θα σας δώσει:
Το αποτέλεσμα είναι το εξής:
- LENGTH('A string') επιστρέφει 8 που είναι το μήκος της συμβολοσειράς "A string".
- Το LENGTH(NULL) επιστρέφει μηδενικό.
- Το LENGTH(20) επιστρέφει 2, επειδή το 20 έχει μήκος 2 μήκη.
- LENGTH(20.5) επιστρέφει 4; Η κινητή υποδιαστολή "." υπολογίζεται ως χαρακτήρας, επομένως θα έχετε τέσσερις χαρακτήρες – τους 3 χαρακτήρες που είναι το μήκος των αριθμών. Συν έναν ακόμη χαρακτήρα για την κινητή υποδιαστολή “.”.
Αλλαγή θήκης με λειτουργία UPPER και LOWER Function
Το UPPER(X) θα επιστρέψει την ίδια συμβολοσειρά x, αλλά θα αντιπροσωπεύει όλους τους χαρακτήρες της συμβολοσειράς με κεφαλαίους χαρακτήρες.
Το LOWER(X) θα επιστρέψει την ίδια συμβολοσειρά x, αλλά θα αντιπροσωπεύει όλους τους χαρακτήρες της συμβολοσειράς με μικρούς χαρακτήρες.
Το UPPER και το LOWER επιστρέφουν μηδενικές τιμές εάν τους μεταβιβάσετε μια μηδενική τιμή.
Εάν μεταβιβάσετε αριθμητικές τιμές σε UPPER ή LOWER, και οι δύο θα επιστρέψουν την ακριβή αριθμητική τιμή.
Παράδειγμα:
SELECT UPPER('a string'), LOWER('A STRING'), UPPER(20), LOWER(20), UPPER(NULL), LOWER(NULL);
Αυτό θα σας δώσει:
Το αποτέλεσμα είναι το εξής:
- UPPER('a string') επιστρέφει τη συμβολοσειρά "μια χορδή"με κεφαλαία παράσταση"ΜΙΑ ΧΟΡΔΗ".
- LOWER('A STRING') επιστρέφει τη συμβολοσειρά "ΜΙΑ ΧΟΡΔΗ"με μικρά γράμματα αναπαράσταση"μια χορδή".
- Τα UPPER(20), LOWER(20) επιστρέφουν τον ίδιο αριθμό, καθώς δεν έχουν καμία επίδραση στους αριθμούς.
- Οι UPPER(NULL), LOWER(NULL) επιστρέφουν null επειδή τους περάσαμε μια τιμή null.
SQLite Λειτουργία SUBSTR
Η συνάρτηση SUBSTR επιστρέφει έναν συγκεκριμένο αριθμό συμβολοσειράς, ξεκινώντας από μια συγκεκριμένη θέση. Μπορείτε να περάσετε τρεις τελεστές στη συνάρτηση, όπως αυτό "SUBSTR(X,Y,Z)” ως εξής:
- Το X είναι η κυριολεκτική συμβολοσειρά ή η στήλη συμβολοσειράς προς ανάλυση. Μπορείτε να μεταβιβάσετε μια κυριολεκτική τιμή (στατική τιμή) ή ένα όνομα στήλης και σε αυτήν την περίπτωση, η τιμή θα διαβαστεί από τις τιμές της στήλης.
- Y είναι η αρχική θέση για να αφαιρέσετε τη συμβολοσειρά ξεκινώντας από αυτήν.
- Z είναι ο αριθμός των χαρακτήρων που πρέπει να αναλυθούν ξεκινώντας από τη συγκεκριμένη θέση Y. Αυτός ο αριθμός είναι προαιρετικός, μπορείτε να τον αγνοήσετε και σε αυτήν την περίπτωση, SQLite θα αφαιρέσει τη συμβολοσειρά ξεκινώντας από τη θέση Y πείτε το τέλος της συμβολοσειράς.
Παράδειγμα:
Στο παρακάτω ερώτημα, θα χρησιμοποιήσουμε τη συνάρτηση SUBSTR για να πάρουμε τους 4 χαρακτήρες που ξεκινούν από τον δεύτερο χαρακτήρα από τα ονόματα των μαθητών:
SELECT StudentName, SUBSTR(StudentName, 2, 4), SUBSTR(StudentName, 2) FROM Students;
Αυτό θα σας δώσει:
- SUBSTR(StudentName, 2, 4) υποσυμβολοσειρά της συμβολοσειράς "Ονομα μαθητή” ξεκινώντας από τον δεύτερο χαρακτήρα και επιστρέψτε τους επόμενους 4 χαρακτήρες.
- Ωστόσο, στη λειτουργία SUBSTR(StudentName, 2) Δεν καθορίσαμε αριθμό για τους χαρακτήρες που θα επιστραφούν, γι' αυτό SQLite επέστρεψε όλους τους υπόλοιπους χαρακτήρες στο "Ονομα μαθητή” ξεκινώντας από τη δεύτερη θέση.
Αλλαγή τμημάτων μιας συμβολοσειράς με SQLite Λειτουργία REPLACE
Το REPLACE χρησιμοποιείται για την αντικατάσταση κάθε συμβολοσειράς που εμφανίζεται σε μια άλλη συμβολοσειρά με μια συμβολοσειρά.
REPLACE(X, Y, Z) – Το X είναι η κυριολεκτική συμβολοσειρά ή η στήλη εισόδου. Το Y είναι η συμβολοσειρά που πρέπει να αντικατασταθεί με τη συμβολοσειρά Z. Σημειώστε ότι θα αντικαταστήσει οποιαδήποτε εμφάνιση της συμβολοσειράς Y με το Z, όχι μόνο ένα.
Παράδειγμα:
Στο ακόλουθο ερώτημα, θα αντικαταστήσουμε όλη την εμφάνιση της συμβολοσειράς "xx«με το κορδόνι»SQLite"
SELECT REPLACE('xx is very lightweight, xx is easy to learn', 'xx', 'SQLite');
Αυτό θα σας δώσει
- Η συνάρτηση αντικατάστασης αντικατέστησε όλες τις συμβολοσειρές "xx«με το κορδόνι»SQLite".
- Άρα η έξοδος θα είναι "SQLite είναι πολύ ελαφρύ, SQLite είναι εύκολο να μάθεις».
Περικοπή κενών διαστημάτων με SQLite Λειτουργία TRIM
TRIM αφαιρέστε τα κενά διαστήματα από την αρχή ή από το τέλος της συμβολοσειράς. Δεν θα αφαιρέσει κενά στη μέση της συμβολοσειράς, μόνο από την αρχή ή από το τέλος.
Παράδειγμα:
Στο επόμενο ερώτημα, θα χρησιμοποιήσουμε τη συνάρτηση TRIM για να αφαιρέσουμε τα κενά κενά από την αρχή και το τέλος της συμβολοσειράς.
Σημειώστε ότι, ο τελεστής συνένωσης "||" χρησιμοποιείται για την προσθήκη ενός επιπλέον ";" μέχρι το τέλος της χορδής. Για να σας δείξουμε ότι τα κενά διαστήματα αφαιρέθηκαν στο μαύρο παράθυρο.
SELECT TRIM(' SQLite is easy to learn ') || ';';
Αυτό θα σας δώσει:
- Παρατηρήστε πώς αφαιρέθηκαν τα κενά διαστήματα από την αρχή και από το τέλος της συμβολοσειράς, αντικαταστάθηκαν από ' ; ' στο τέλος.
Διαβάζοντας τις Απόλυτες Αξίες με SQLite Λειτουργία ABS
Η συνάρτηση ABS επιστρέφει την απόλυτη τιμή μιας αριθμητικής τιμής. Η απόλυτη τιμή είναι η αριθμητική τιμή χωρίς κανένα θετικό ή αρνητικό πρόσημο. Το ABS(X) επιστρέφει μια τιμή ανάλογα με την τιμή του X ως εξής:
- Η απόλυτη τιμή του Χ αν το Χ είναι αριθμητική τιμή.
- Μια τιμή NULL εάν το X είναι μηδενική τιμή.
- Η τιμή "0.0" αν το X είναι συμβολοσειρά.
Παράδειγμα:
Στο παρακάτω ερώτημα, θα προσπαθήσουμε να πάρουμε την απόλυτη τιμή μιας συμβολοσειράς, ενός αριθμού και μιας τιμής null χρησιμοποιώντας τη συνάρτηση ABS:
SELECT ABS(-2), ABS(+2), ABS('a string'), ABS(null);
Αυτό θα σας δώσει:
Τα αποτελέσματα ως εξής:
- Το ABS(-2), το ABS(+2) επιστρέφει 2, επειδή το 2 είναι απόλυτη τιμή και για το “-2” και για το “+2”.
- Το ABS('a string') επιστρέφει "0.0" επειδή περάσατε μια τιμή συμβολοσειράς και όχι μια αριθμητική τιμή.
- Το ABS(null) επιστρέφει null επειδή περάσατε μια τιμή null για αυτό.
Στρογγυλοποίηση τιμών με τη συνάρτηση ROUND μέσα SQLite
Οι δεκαδικοί αριθμοί είναι αριθμοί με κινητή υποδιαστολή "." σε αυτό, για παράδειγμα, "20.5", "8.65". Το τμήμα στα αριστερά της κινητής υποδιαστολής ονομάζεται ακέραιο μέρος και το τμήμα στα δεξιά της κινητής υποδιαστολής είναι το δεκαδικό μέρος.
Ακέραιοι αριθμοί είναι εκείνοι οι αριθμοί χωρίς καμία κινητή υποδιαστολή πάνω τους. Για παράδειγμα, "20", "8".
Το ROUND(X) μετατρέπει τις δεκαδικές τιμές ή τις στήλες X σε ακέραιους αριθμούς μόνο. Το ακέραιο μέρος που είναι το μέρος στα αριστερά της υποδιαστολής θα επιστραφεί και όλα τα ψηφία στα δεξιά της υποδιαστολής θα αφαιρεθούν.
Παράδειγμα:
Στο παρακάτω ερώτημα θα δοκιμάσουμε τη συνάρτηση ROUND με διαφορετικές επιλογές:
SELECT ROUND(12.4354354), ROUND(12.4354354, 2), ROUND(NULL), ROUND('a string');
Αυτό θα σας δώσει:
Το αποτέλεσμα ως εξής:
- ROUND(12.4354354) – επιστρέφει την τιμή "12", επειδή δεν προσδιορίσατε τον αριθμό των ψηφίων. Ετσι, SQLite αφαίρεσε όλο το δεκαδικό μέρος.
- ROUND(12.4354354, 2) – επιστρέφει την τιμή "12.44", επειδή καθορίσατε μόνο 2 ψηφία για στρογγυλοποίηση που είναι τα δύο ψηφία από τα δεξιά της υποδιαστολής.
- ROUND(NULL) – επιστρέφει null επειδή του περάσατε μια μηδενική τιμή.
- ROUND('μια συμβολοσειρά') – επιστρέφει την τιμή "0.0" επειδή του περάσατε μια τιμή συμβολοσειράς.
Εύρεση του τύπου δεδομένων της έκφρασης με τη συνάρτηση TYPEOF
Εάν θέλετε να μάθετε τον τύπο μιας στήλης ή μια κυριολεκτική τιμή, μπορείτε να χρησιμοποιήσετε τη συνάρτηση TYPEOF για να το κάνετε αυτό.
Η συνάρτηση TYPEOF(X), από το όνομά της, επιστρέφει τον τύπο δεδομένων της έκφρασης X. Επιστρέφει μια τιμή συμβολοσειράς που υποδεικνύει τον τύπο δεδομένων του X. Επιστρέφει την τιμή με βάση τους τύπους δεδομένων, είτε πρόκειται για τιμή "NULL", πραγματικό, κείμενο, ακέραιος, …, κ.λπ.
Παράδειγμα:
Στο παρακάτω ερώτημα θα δοκιμάσουμε τη συνάρτηση TYPEOF με διαφορετικούς τύπους κυριολεκτικών τιμών:
SELECT TYPEOF(null), TYPEOF(12), TYPEOF(12.5), TYPEOF('a string');
Αυτό θα σας δώσει:
Τα αποτελέσματα που επιστράφηκαν έχουν ως εξής:
- TYPEOF(null) – επιστρέφει null επειδή του περάσατε μια τιμή null.
- TYPEOF(12) – επιστρέψτε έναν ακέραιο καθώς το 12 είναι ένας ακέραιος αριθμός.
- TYPEOF(12.5) – επιστρέφει REAL καθώς το 12.5 είναι πραγματικός αριθμός.
- TYPEOF('a string') – επιστρέφει κείμενο καθώς το "a string" είναι κείμενο.
Εύρεση της τελευταίας εγγραφής που εισήχθη με SQLite LAST_INSERT_ROWID
SQLite εκχωρεί ένα ακέραιο κλειδί (Id) για όλες τις σειρές σε όλους τους πίνακες. Αυτός ο αριθμός χρησιμοποιείται για τον μοναδικό προσδιορισμό αυτών των σειρών.
Όταν ΕΙΣΑΓΕΤΕ μια νέα σειρά σε έναν πίνακα, SQLite θα εκχωρήσει στο rowid μια μοναδική τιμή.
Εάν ο πίνακας έχει ένα πρωτεύον κλειδί δηλωμένο σε μία μόνο στήλη και αυτή η στήλη είναι τύπου δεδομένων INTEGER, τότε αυτή η τιμή στήλης θα χρησιμοποιηθεί ως γραμμή.
Η συνάρτηση LAST_INSERT_ROWID() επιστρέφει το ROW_ID της τελευταίας σειράς που εισήχθη σε οποιονδήποτε πίνακα στη βάση δεδομένων. Σημειώστε ότι δεν χρειάζεται τελεστή.
Παράδειγμα:
Στο παρακάτω παράδειγμα θα εκτελέσουμε τη συνάρτηση LAST_INSERT_ROWID() ως εξής:
SELECT LAST_INSERT_ROWID();
Αυτό θα σας δώσει:
- Η LAST_INSERT_ROWID() επιστρέφει 0 επειδή δεν υπάρχουν σειρές που έχουν εισαχθεί σε κανέναν πίνακα στην τρέχουσα σύνδεση βάσης δεδομένων.
Τώρα, ας εισαγάγουμε έναν νέο μαθητή και ας εκτελέσουμε ξανά τη συνάρτηση LAST_INSERT_ROWID() μετά την πρόταση εισαγωγής, ως εξής:
INSERT INTO Students VALUES(11, 'guru', 1, '1998-10-12'); SELECT LAST_INSERT_ROWID();
Αυτό θα σας δώσει:
- Αφού εισαγάγαμε έναν νέο μαθητή με αναγνωριστικό 11, η LAST_INSERT_ROWID() θα επιστρέψει το αναγνωριστικό της τελευταίας εισαγόμενης σειράς που είναι 11.
Λήψη της έκδοσης σας SQLite βιβλιοθήκη
Για να αποκτήσετε την έκδοση σας SQLite βιβλιοθήκη, πρέπει να καλέσετε τη συνάρτηση SQLITE_VERSION().
Παράδειγμα:
Ας μάθουμε ποια είναι η έκδοση του SQLite χρησιμοποιούμε εκτελώντας την ακόλουθη εντολή:
SELECT SQLITE_VERSION();
Αυτό θα σας δώσει:
Η SQLITE_VERSION() επιστρέφει την έκδοση 3.9.2 που είναι η έκδοση του SQLite χρησιμοποιούμε.
Δημιουργία συναρτήσεων που καθορίζονται από το χρήστη και συγκεντρωτικών συναρτήσεων που ορίζονται από το χρήστη
Για ορισμένους χρήστες, το SQLite οι βασικές λειτουργίες είναι περιορισμένες. Ίσως χρειαστεί να προσθέσουν προσαρμοσμένες λειτουργίες για τις προσαρμοσμένες ανάγκες τους.
SQLite δεν υποστηρίζει τη δημιουργία συναρτήσεων που καθορίζονται από το χρήστη. Σε αντίθεση με άλλα συστήματα διαχείρισης βάσεων δεδομένων, δεν μπορείτε να δημιουργήσετε λειτουργίες που καθορίζονται από το χρήστη SQLite κατευθείαν.
Ωστόσο, μπορείτε να δημιουργήσετε μια συνάρτηση χρησιμοποιώντας γλώσσες προγραμματισμού όπως C#, C, PHP ή C++ και προσάρτησε αυτή τη λειτουργία με τον πυρήνα SQLite λειτουργίες στο SQLite η ίδια η βιβλιοθήκη, χρησιμοποιώντας "sqlite3_create_function" λειτουργία. Στη συνέχεια, μπορείτε να τα χρησιμοποιήσετε ξανά στη βάση δεδομένων σας.
Παράδειγμα:
Στο παρακάτω παράδειγμα θα δημιουργήσουμε μια συνάρτηση που ορίζεται από το χρήστη χρησιμοποιώντας C# γλώσσα προγραμματισμού και να την προσθέσετε σε SQLite λειτουργίες:
[SQLiteFunction(Name = "DoubleValue", Arguments = 1, FuncType = FunctionType.Scalar)]
public class DoubleValue: SQLiteFunction
{
public override object Invoke(object[] args)
{
return args[0] * 2;
}
}
Αυτό το απόσπασμα κώδικα είναι γραμμένο στο Γλώσσα προγραμματισμού C#; δημιουργεί μια συνάρτηση C# χρησιμοποιώντας τον κώδικα C#.
Το όνομα της συνάρτησης θα είναι "Doubleαξία» παίρνει μία παράμετρο και επιστρέφει την τιμή της πολλαπλασιασμένη επί 2.
Σημειώστε ότι το C# προσθέτει αυτόματα αυτήν τη συνάρτηση SQLite. Το μόνο που χρειάζεστε είναι να μεταγλωττίσετε και να εκτελέσετε αυτόν τον κώδικα. Στη συνέχεια, το C# θα προσθέσει αυτή τη συνάρτηση με το ίδιο όνομα στη λίστα των SQLite λειτουργίες. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε αυτήν τη λειτουργία σε SQLite.
Με τον ίδιο τρόπο χρησιμοποιώντας γλώσσες προγραμματισμού όπως C#, C, PHP ή C++, μπορείτε επίσης να δημιουργήσετε συγκεντρωτικές λειτουργίες που ορίζονται από το χρήστη. Τα οποία χρησιμοποιούνται για την επέκταση των αθροιστικών συναρτήσεων σε SQLite και χρησιμοποιήστε τα για να δημιουργήσετε προσαρμοσμένες συναρτήσεις συγκεντρωτικών στοιχείων.
Περίληψη
- SQLite παρέχει ένα ολοκληρωμένο σύνολο ενσωματωμένων λειτουργιών που διευκολύνουν την εργασία με τους πίνακες και τις στήλες της βάσης δεδομένων, όπως είδαμε. Μπορείτε να χρησιμοποιήσετε αυτές τις συναρτήσεις με στήλες καθώς και με κυριολεκτικές τιμές σε οποιαδήποτε έκφραση στα ερωτήματά σας SQL.
- Μπορείτε επίσης να χρησιμοποιήσετε τη συνάρτηση μήκους με αριθμητικές τιμές για να λάβετε το μήκος της αριθμητικής τιμής.
- Το UPPER και το LOWER επιστρέφουν μηδενικές τιμές εάν τους μεταβιβάσετε μια μηδενική τιμή.
- Η συνάρτηση SUBSTR επιστρέφει έναν συγκεκριμένο αριθμό συμβολοσειράς, ξεκινώντας από μια συγκεκριμένη θέση.
- Το REPLACE χρησιμοποιείται για την αντικατάσταση κάθε συμβολοσειράς που εμφανίζεται σε μια άλλη συμβολοσειρά με μια συμβολοσειρά.
- Το TRIM αφαιρεί τα κενά διαστήματα από την αρχή ή από το τέλος της συμβολοσειράς.
- Η συνάρτηση ABS επιστρέφει την απόλυτη τιμή μιας αριθμητικής τιμής.
- Το ROUND(X) μετατρέπει τις δεκαδικές τιμές ή τις στήλες X σε ακέραιους αριθμούς μόνο.
- Η συνάρτηση TYPEOF(X), από το όνομά της, επιστρέφει τον τύπο δεδομένων της έκφρασης X.
- Η συνάρτηση LAST_INSERT_ROWID() επιστρέφει το ROW_ID της τελευταίας σειράς που εισήχθη σε οποιονδήποτε πίνακα στη βάση δεδομένων.













