Μετατροπές NVL για διάφορους τύπους δεδομένων. Λειτουργίες TO_NUMBER και TO_DATE

Κατά τη σύνταξη ερωτημάτων SQL, συχνά προκύπτει μια κατάσταση όταν, κατά την επιλογή δεδομένων, πρέπει να συγκρίνετε τις τιμές πολλών στηλών και να εξάγετε αυτή που περιέχει δεδομένα (όχι κενή). Η έκφραση Coalesce λύνει αυτό το πρόβλημα τέλεια. Σε αυτό το άρθρο θα βρείτε μια πλήρη περιγραφή της έκφρασης Coalesce sql, μια περιγραφή των χαρακτηριστικών χρήσης της, καθώς και παραδείγματα.

Εκτύπωση μη μηδενικών τιμών χρησιμοποιώντας Coalesce. Ιδιαιτερότητες

Ας δούμε τις δυνατότητες χρήσης του Sql Coalesce:

  1. Επιτρέπει τον καθορισμό οποιουδήποτε αριθμού ορισμάτων (σε αντίθεση με τα Isnull/Nvl/Nvl2, τα οποία έχουν περιορισμένο αριθμό ορισμάτων).
  2. Μπορεί να δεχθεί υποερωτήματα ως επιχειρήματα.
  3. Επιστρέφει αποτέλεσμα ίσο με πρώτατιμή διαφορετική από Null ή Null εάν δεν βρεθεί άλλη τιμή εκτός από Null.
  4. Το Sql Coalesce μπορεί να χρησιμοποιηθεί στην ρήτρα Select για να επιλέξετε μια μη κενή τιμή και επίσης στο Where να καθορίσετε ότι ένα σύνολο στηλών με μηδενικές τιμές δεν επιτρέπεται (/επιτρέπεται).
  5. Αυτή η έκφραση είναι ισοδύναμη με τη χρήση της έκφρασης Case, η οποία ελέγχει κάθε όρισμα διαδοχικά για τη συνθήκη Όταν το όρισμα1 δεν είναι μηδενικό, τότε το όρισμα1. Ουσιαστικά, το Coalesce είναι μια "συντόμευση" που δημιουργήθηκε για ευκολία στη χρήση και σε πολλά DBMS, οι βελτιστοποιητές ερωτημάτων ξαναγράφουν την έκφραση Coalesce σε Case.
  6. Οι συναρτήσεις Sql Coalesce είναι διαθέσιμες σε όλες τις κύριες σχεσιακές

Συντακτικό Coalesce

Όποιος έχει χρησιμοποιήσει ποτέ το Coalesce κατά τη σύνταξη ερωτημάτων sql γνωρίζει ότι η σύνταξη αυτής της έκφρασης είναι εξαιρετικά απλή. Αρκεί να υποδείξετε τα ορίσματα που δοκιμάστηκαν για το Null σε παρένθεση, χωρισμένα με κόμμα. Αν υποθέσουμε ότι τα ορίσματα ονομάζονται arg1, arg2, ... argN, τότε η σύνταξη Coalesce θα μοιάζει με αυτό:

Συνένωση (arg1, arg2, … argN).

Ας ετοιμάσουμε αρκετούς πίνακες για να μελετήσουμε τον μηχανισμό λειτουργίας αυτής της έκφρασης.

Προετοιμασία τραπεζιών

Για να κατανοήσουμε καλύτερα την περιγραφή Coalesce sql, ας δημιουργήσουμε δύο πίνακες στη βάση δεδομένων που περιέχουν πληροφορίες για αντικείμενα ακίνητης περιουσίας.

Έστω ο πρώτος πίνακας Περιοχή περιέχει τα ονόματα των ακινήτων και την περιοχή τους. Η περιοχή μπορεί να καθοριστεί (area_yt) ή να δηλωθεί (area_decl).

ταυτότητα

αντικείμενο_όνομα

area_yt

area_decl

Ημιτελές αντικείμενο κατασκευής 1

Δωμάτιο 1

Δωμάτιο 2

Οικόπεδο 1

Κτίριο 1

Δωμάτιο 3

Κτίριο 2

Έστω ο δεύτερος πίνακας Basic_characteristic περιέχει πληροφορίες για τα κύρια χαρακτηριστικά του αντικειμένου ακινήτων - μήκος (Επέκταση), βάθος (Βάθος), εμβαδόν (Εμβαδόν), όγκο (Εύρος), ύψος (Ύψος).

ταυτότητα

αντικείμενο_όνομα

Επέκταση

Βάθος

Περιοχή

Πεδίο εφαρμογής

Υψος

Κτίριο 1

Οικόπεδο 1

Δωμάτιο 1

Δωμάτιο 2

Δωμάτιο 3

Εξετάσαμε τη σύνταξη Coalesce sql, την περιγραφή, τα χαρακτηριστικά χρήσης και ας περάσουμε απευθείας στα παραδείγματα.

Παραδείγματα χρήσης

Η σύνταξη της έκφρασης Coalesce είναι εξαιρετικά απλή, αλλά είναι σημαντικό να θυμάστε ότι το αποτέλεσμα της εκτέλεσης της εντολής θα είναι η ΠΡΩΤΗ μη κενή τιμή που βρέθηκε από τη λίστα ορισμάτων. Αυτή η παρατήρηση είναι πολύ σημαντική, επομένως τα επιχειρήματα στην έκφραση πρέπει να ταξινομηθούν κατά σειρά σπουδαιότητας. Ο ευκολότερος τρόπος για να κατανοήσετε την αρχή είναι από τον πίνακα περιοχών. Συντάξτε ένα ερώτημα επιλέγοντας το όνομα του ακινήτου, καθώς και την τιμή της περιοχής:

SELECT Area.id, Area.object_name, coalesce(Area.area_yt, Area.area_decl)

Και πάρε το αποτέλεσμα:

Για τα αντικείμενα "Κτίριο 1", "Οικόπεδο 1" και "Δομή 2", συμπληρώθηκαν και οι δύο τιμές περιοχής, αλλά δόθηκε προτεραιότητα στην καθορισμένη περιοχή, αφού την υποδείξαμε πρώτη στη λίστα ορισμάτων. Η έκφραση Coalesce βρήκε την πρώτη μη κενή τιμή και την εκτύπωσε, σταματώντας περαιτέρω ορίσματα. Αυτή η κατασκευή ερωτήματος είναι σωστή, επειδή η καθορισμένη περιοχή είναι πιο συγκεκριμένη από τη δηλωθείσα. Αν είχαμε καθορίσει τη δηλωμένη περιοχή ως πρώτο όρισμα, τότε όταν συμπληρωνόταν αυτό το πεδίο πίνακα θα είχε προτεραιότητα.

Εκτός από τη χρήση στο Select, είναι πολύ συνηθισμένο να χρησιμοποιείται η έκφραση Coalesce με μια συνθήκη Where. Σας επιτρέπει να αποκόψετε από το αποτέλεσμα εκείνες τις σειρές στις οποίες οι τιμές της λίστας πεδίων είναι κενές (ή αντίστροφα, συμπεριλάβετε στο αποτέλεσμα μόνο εκείνες τις τιμές όπου η λίστα των πεδίων δεν είναι συμπληρωμένη). Αυτή η κατάσταση συμβαίνει παντού: για παράδειγμα, σε μια επιχείρηση, κατά την εγγραφή ενός νέου υπαλλήλου, μόνο βασικές πληροφορίες γι 'αυτόν καταχωρήθηκαν στη βάση δεδομένων και η συμπλήρωση λεπτομερών πληροφοριών έμεινε "για αργότερα". Σταδιακά, εμφανίζονται «κενά» - είτε πριν από μια επιθεώρηση, είτε όταν ένας υπάλληλος στέλνεται σε διακοπές/επαγγελματικό ταξίδι/αναρρωτική άδεια.

Ας επιλέξουμε από τον πίνακα με τα κύρια χαρακτηριστικά ακίνητα για τα οποία δεν συμπληρώνεται καμία από τις χαρακτηριστικές τιμές:

Ελπίζουμε ότι η λεπτομερής περιγραφή του Coalesce sql σας βοήθησε να κατανοήσετε όλες τις δυνατότητες χρήσης αυτής της έκφρασης, καθώς και να κατανοήσετε τις σημαντικές αποχρώσεις.

Λειτουργία NVL

Η συνάρτηση NVL χρησιμοποιείται γενικά πιο συχνά. Η συνάρτηση λαμβάνει δύο παραμέτρους: NVL(expr1, expr2). Εάν η πρώτη παράμετρος expr1 δεν είναι NULL, τότε η συνάρτηση επιστρέφει την τιμή της. Εάν η πρώτη παράμετρος είναι NULL, τότε η συνάρτηση επιστρέφει την τιμή της δεύτερης παραμέτρου expr2.

Ας δούμε ένα πρακτικό παράδειγμα. Το πεδίο COMM στον πίνακα EMP μπορεί να περιέχει NULL τιμές. Κατά την εκτέλεση ενός ερωτήματος όπως:

ΕΠΙΛΟΓΗ EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

ΑΠΟ SCOTT.EMP

η τιμή NULL θα αντικατασταθεί από το μηδέν. Σημειώστε ότι όταν μια τιμή δημιουργείται χρησιμοποιώντας μια συνάρτηση, της εκχωρείται ένα ψευδώνυμο. Τα αποτελέσματα του ερωτήματος θα έχουν την εξής μορφή:

ΕΜΠΝΟ ENAME ΚΟΙΝ NVL_COMM
7369 ΣΙΔΗΡΟΥΡΓΟΣ 0
7499 ALLEN 300 300
7521 ΠΤΕΡΥΓΑ 500 500
7566 JONES 0
7654 ΧΕΛΙΔΟΝΙ 1400 1400
7698 BLAKE 0
7782 ΚΛΑΡΚ 0
7839 ΒΑΣΙΛΙΑΣ 0
7844 ΤΟΡΝΑΔΟΡΟΣ 0 0
7900 Τζέιμς 0
7902 ΠΕΡΑΣΜΑ 0
7934 ΜΥΛΩΝΑΣ 0

Συνάρτηση CEIL(n)

Η συνάρτηση CEIL επιστρέφει τον μικρότερο ακέραιο μεγαλύτερο ή ίσο με τον αριθμό n που δόθηκε ως παράμετρος. Για παράδειγμα:

SELECT CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

ΑΠΟ DUAL

Συνάρτηση TRUNC(n [,m])

Η συνάρτηση TRUNC επιστρέφει τον αριθμό n, περικομμένο σε m δεκαδικά ψηφία. Η παράμετρος m μπορεί να μην καθορίζεται σε αυτήν την περίπτωση, το n περικόπτεται σε έναν ακέραιο.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

ΑΠΟ DUAL

Λειτουργία SIGN(n)

Η συνάρτηση SIGN καθορίζει το πρόσημο ενός αριθμού. Εάν το n είναι θετικό, τότε η συνάρτηση επιστρέφει 1. Εάν το n είναι αρνητικό, επιστρέφει -1. Αν ισούται με μηδέν, τότε επιστρέφεται 0.

SELECT SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

ΑΠΟ DUAL

Ένα ενδιαφέρον χαρακτηριστικό αυτής της συνάρτησης είναι η δυνατότητα μετάδοσης m ίσου με μηδέν χωρίς να προκαλείται σφάλμα διαίρεσης με το 0.

Λειτουργία POWER(n, m)

Η συνάρτηση POWER αυξάνει τον αριθμό n στην ισχύ m. Ο βαθμός μπορεί να είναι κλασματικός και αρνητικός, γεγονός που διευρύνει σημαντικά τις δυνατότητες αυτής της συνάρτησης.

SELECT POWER(10, 2) X1, POWER(100, 1/2) X2,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

ΑΠΟ DUAL

Χ1 X2 X3 Χ4
100 10 10 0,1

Σε ορισμένες περιπτώσεις, ενδέχεται να προκύψει εξαίρεση κατά την κλήση αυτής της συνάρτησης. Για παράδειγμα:

SELECT POWER(-100, 1/2) X2

ΑΠΟ DUAL

Σε αυτήν την περίπτωση, επιχειρείται να υπολογιστεί η τετραγωνική ρίζα ενός αρνητικού αριθμού, η οποία θα έχει ως αποτέλεσμα το σφάλμα ORA-01428 "Επιχείρημα εκτός εύρους".

Συνάρτηση SQRT(n)

Αυτή η συνάρτηση επιστρέφει την τετραγωνική ρίζα του αριθμού n. Για παράδειγμα:

SELECT SQRT(100) X

ΑΠΟ DUAL

Συναρτήσεις EXP(n) και LN(n).

Η συνάρτηση EXP αυξάνει το e στην ισχύ n και η συνάρτηση LN υπολογίζει τον φυσικό λογάριθμο του n (το n πρέπει να είναι μεγαλύτερο από μηδέν). Παράδειγμα:

SELECT EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

Λειτουργία TO_CHAR με αριθμούς

Λειτουργίες μετατροπής δεδομένων σε άλλους τύπους δεδομένων. TO_CHAR(αριθμός) μετατρέπει έναν αριθμό σε κείμενο. Το TO_NUMBER(string) μετατρέπει το κείμενο σε αριθμό.

SELECT TO_CHAR (123) FROM DUAL θα επιστρέψει τη συμβολοσειρά 123, SELECT TO_NUMBER (`12345") FROM DUAL θα επιστρέψει τον αριθμό 12345.

Εργαστηριακές εργασίες. Αλλαγή της μορφής αριθμού εξόδου

Αλλαγές στη μορφή των αριθμητικών τιμών στο Oracle SQL, τη συνάρτηση TO_CHAR για εργασία με αριθμητικές τιμές.

Ασκηση:

Γράψτε ένα ερώτημα που θα εμφανίζει πληροφορίες σχετικά με το όνομα, το επώνυμο και τον μισθό των εργαζομένων από τον πίνακα hr.employees με τη μορφή που φαίνεται στο Σχ. 3.4-1:

Ρύζι. 3.4 -1

Σε αυτήν την περίπτωση, τα δεδομένα θα πρέπει να ταξινομηθούν με τέτοιο τρόπο ώστε να εμφανίζονται πρώτα οι σειρές για τους υπαλλήλους με τον υψηλότερο μισθό.

Σημείωση:

Ορισμένες τιμές μισθού στο Σχ. 3.4-1 έχουν τροποποιηθεί, επομένως ενδέχεται να μην είναι ίδιες με τις τιμές σας.

Λύση:

ΕΠΙΛΕΞΤΕ όνομα ΩΣ "Όνομα", επώνυμο Ως "Επώνυμο", TO_CHAR (ΜΙΣΘΟΣ, "L999999999.99") Ως "Μισθός" ΑΠΟ hr.employees ΠΑΡΑΓΓΕΛΙΑ ΚΑΤΑ ΜΙΣΘΟ ΠΕΡΙΦ.

Λειτουργίες TO_NUMBER και TO_DATE

Λειτουργία μετατροπής μιας συμβολοσειράς σε ημερομηνία TO_DATE (συμβολοσειρά, μορφή). Οι πιθανές τιμές μορφής έχουν ήδη συζητηθεί παραπάνω, επομένως θα δώσω πολλά παραδείγματα χρήσης αυτής της συνάρτησης. Παραδείγματα:

ΕΠΙΛΕΓΩ TO_DATE("01/01/2010", `ΗΗ.ΜΜ.ΕΕΕΕ") ΑΠΟΤο DUAL θα επιστρέψει την ημερομηνία «01/01/2010».

ΕΠΙΛΕΓΩ TO_DATE("01.ΙΑΝ.2010", `ΗΗ.ΔΕΥ.ΕΕΕΕ") ΑΠΟΤο DUAL θα επιστρέψει την ημερομηνία «01/01/2009».

ΕΠΙΛΕΓΩ TO_DATE("15-01-10", `ΗΗ-ΜΜ-ΕΕ") ΑΠΟΤο DUAL θα επιστρέψει την ημερομηνία «15/01/2010».

Λειτουργία μετατροπής συμβολοσειράς σε αριθμητική τιμή TO_NUMBER (συμβολοσειρά, μορφή). Οι πιο συνηθισμένες τιμές μορφής παρατίθενται στον πίνακα, οπότε ας δούμε τη χρήση αυτής της συνάρτησης χρησιμοποιώντας παραδείγματα. Παραδείγματα:

ΕΠΙΛΕΓΩ TO_NUMBER(`100") ΑΠΟΤο DUAL θα επιστρέψει τον αριθμό 100 SELECT TO_NUMBER (`0010.01", "9999D99") ΑΠΟΤο DUAL θα επιστρέψει τον αριθμό 10.01.

ΕΠΙΛΕΓΩ TO_NUMBER("500.000", "999G999") ΑΠΟΤο DUAL θα επιστρέψει τον αριθμό 500000.

Στοιχείο RR σε μορφή ημερομηνίας

Το στοιχείο μορφής ημερομηνίας RR είναι παρόμοιο με το στοιχείο μορφής ημερομηνίας ώρας YY, αλλά παρέχει πρόσθετη ευελιξία για την αποθήκευση τιμών ημερομηνίας σε άλλους αιώνες. Το στοιχείο μορφής ημερομηνίας RR επιτρέπει την αποθήκευση ημερομηνιών του 20ου αιώνα στον 21ο αιώνα, προσδιορίζοντας μόνο τα δύο τελευταία ψηφία του έτους.

Εάν τα δύο τελευταία ψηφία του τρέχοντος έτους είναι από το 00 έως το 49, τότε το έτος που επιστρέφεται έχει τα ίδια δύο πρώτα ψηφία με το τρέχον έτος.

Εάν τα δύο τελευταία ψηφία του τρέχοντος έτους είναι από το 50 έως το 99, τότε τα 2 πρώτα ψηφία του έτους που επιστρέφεται είναι 1 μεγαλύτερα από τα 2 πρώτα ψηφία του τρέχοντος έτους.

Εάν τα δύο τελευταία ψηφία του τρέχοντος έτους είναι 00 έως 49, τότε τα 2 πρώτα ψηφία του έτους που επιστρέφεται είναι 1 λιγότερα από τα 2 πρώτα ψηφία του τρέχοντος έτους.

Εάν τα δύο τελευταία ψηφία του τρέχοντος έτους είναι από 50 έως 99, τότε το έτος που επιστρέφεται έχει τα ίδια δύο πρώτα ψηφία με το τρέχον έτος.

Λειτουργία NVL

Η συνάρτηση NVL χρησιμοποιείται γενικά πιο συχνά. Η συνάρτηση λαμβάνει δύο παραμέτρους: NVL (expr1, expr2). Εάν η πρώτη παράμετρος expr1 δεν είναι NULL, τότε η συνάρτηση επιστρέφει την τιμή της. Εάν η πρώτη παράμετρος είναι NULL, τότε η συνάρτηση επιστρέφει την τιμή της δεύτερης παραμέτρου expr2.

Παράδειγμα: Επιλέξτε NVL (supplier_city, n/a") από προμηθευτές:

Η παραπάνω δήλωση SQL θα επιστρέψει n/" εάν το πεδίο προμηθευτής_πόλης περιέχει μια τιμή null. Διαφορετικά, θα επιστρέψει την τιμή προμηθευτή_πόλης.

Ένα άλλο παράδειγμα χρήσης της συνάρτησης NVL στο Oracle/PLSQL είναι:

επιλέξτε προμηθευτής_αναγνωριστικό, NVL(supplier_desc, προμηθευτής_όνομα) από προμηθευτές.

Αυτή η δήλωση SQL θα επιστρέψει Όνομα προμηθευτήπεδίο αν προμηθευτής_περιγραφήπεριέχει μηδενική τιμή. Διαφορετικά θα επιστρέψει προμηθευτής_περιγραφή.

Τελευταίο παράδειγμα: Η χρήση της συνάρτησης NVL στο Oracle/PLSQL είναι: επιλέξτε NVL(προμήθεια, 0) από τις πωλήσεις.

Αυτή η δήλωση SQL επέστρεψε την τιμή 0 if επιτροπήΤο πεδίο περιέχει μια μηδενική τιμή. Διαφορετικά θα επέστρεφε προμήθειεςπεδίο.

Μετατροπές NVL για διάφορους τύπους δεδομένων

Για να μετατρέψετε μια απροσδιόριστη τιμή σε μια πραγματική τιμή, χρησιμοποιήστε τη συνάρτηση NVL: NVL ( έκφραση1, έκφραση2), Οπου:

έκφραση 1-Η αρχική ή η υπολογισμένη τιμή, η οποία μπορεί να είναι απροσδιόριστη.

έκφραση2- Η τιμή που αντικαθιστά την απροσδιόριστη τιμή.

Σημείωση:Η συνάρτηση NVL μπορεί να χρησιμοποιηθεί για τη μετατροπή οποιουδήποτε τύπου δεδομένων, αλλά το αποτέλεσμα θα είναι πάντα ο ίδιος τύπος έκφραση 1.

Μετατροπή NVL για διαφορετικούς τύπους:

ΑΡΙΘΜΟΣ - NVL (αριθμητική στήλη, 9).

CHAR ή VARCHAR2 - NVL (χαρακτήρες|στήλη,"Μη διαθέσιμος").

Εργαστηριακές εργασίες. Χρήση της συνάρτησης NVL

Λειτουργία NVL για εργασία με μηδενικές τιμές στο Oracle SQL.

Ασκηση:

Γράψτε ένα ερώτημα που εμφανίζει πληροφορίες για το όνομα και το επώνυμο του υπαλλήλου από τον πίνακα hr.employees, καθώς και το ποσοστό προμήθειας (στήλη COMMISSION_PCT). Σε αυτήν την περίπτωση, για τους υπαλλήλους για τους οποίους δεν έχει καθοριστεί η προμήθεια, πρέπει να εμφανίσετε την τιμή 0. Το αποτέλεσμα του αιτήματος θα πρέπει να είναι όπως φαίνεται στο Σχ. 3,5-1.

Ρύζι. 3.5 -1 (οι τιμές εμφανίζονται ξεκινώντας από τη γραμμή 51)

Λύση:

Ο αντίστοιχος κωδικός αιτήματος θα μπορούσε να είναι ως εξής:

SELECT first_name AS "First Name", last_name As "Last Name", NVL (COMMISSION_PCT, 0) Ως "Commission Rate" FROM hr.employees.

Λειτουργία NVL

Η συνάρτηση NVL χρησιμοποιείται γενικά πιο συχνά. Η συνάρτηση λαμβάνει δύο παραμέτρους: NVL(expr1, expr2). Εάν η πρώτη παράμετρος expr1 δεν είναι NULL, τότε η συνάρτηση επιστρέφει την τιμή της. Εάν η πρώτη παράμετρος είναι NULL, τότε η συνάρτηση επιστρέφει την τιμή της δεύτερης παραμέτρου expr2.

Ας δούμε ένα πρακτικό παράδειγμα. Το πεδίο COMM στον πίνακα EMP μπορεί να περιέχει NULL τιμές. Κατά την εκτέλεση ενός ερωτήματος όπως:

ΕΠΙΛΟΓΗ EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

ΑΠΟ SCOTT.EMP

η τιμή NULL θα αντικατασταθεί από το μηδέν. Σημειώστε ότι όταν μια τιμή δημιουργείται χρησιμοποιώντας μια συνάρτηση, της εκχωρείται ένα ψευδώνυμο. Τα αποτελέσματα του ερωτήματος θα έχουν την εξής μορφή:

ΕΜΠΝΟ ENAME ΚΟΙΝ NVL_COMM
7369 ΣΙΔΗΡΟΥΡΓΟΣ 0
7499 ALLEN 300 300
7521 ΠΤΕΡΥΓΑ 500 500
7566 JONES 0
7654 ΧΕΛΙΔΟΝΙ 1400 1400
7698 BLAKE 0
7782 ΚΛΑΡΚ 0
7839 ΒΑΣΙΛΙΑΣ 0
7844 ΤΟΡΝΑΔΟΡΟΣ 0 0
7900 Τζέιμς 0
7902 ΠΕΡΑΣΜΑ 0
7934 ΜΥΛΩΝΑΣ 0

Συνάρτηση CEIL(n)

Η συνάρτηση CEIL επιστρέφει τον μικρότερο ακέραιο μεγαλύτερο ή ίσο με τον αριθμό n που δόθηκε ως παράμετρος. Για παράδειγμα:

SELECT CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

ΑΠΟ DUAL

Συνάρτηση TRUNC(n [,m])

Η συνάρτηση TRUNC επιστρέφει τον αριθμό n, περικομμένο σε m δεκαδικά ψηφία. Η παράμετρος m μπορεί να μην καθορίζεται σε αυτήν την περίπτωση, το n περικόπτεται σε έναν ακέραιο.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

ΑΠΟ DUAL

Λειτουργία SIGN(n)

Η συνάρτηση SIGN καθορίζει το πρόσημο ενός αριθμού. Εάν το n είναι θετικό, τότε η συνάρτηση επιστρέφει 1. Εάν το n είναι αρνητικό, επιστρέφει -1. Αν ισούται με μηδέν, τότε επιστρέφεται 0.

SELECT SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3

ΑΠΟ DUAL

Ένα ενδιαφέρον χαρακτηριστικό αυτής της συνάρτησης είναι η δυνατότητα μετάδοσης m ίσου με μηδέν χωρίς να προκαλείται σφάλμα διαίρεσης με το 0.

Λειτουργία POWER(n, m)

Η συνάρτηση POWER αυξάνει τον αριθμό n στην ισχύ m. Ο βαθμός μπορεί να είναι κλασματικός και αρνητικός, γεγονός που διευρύνει σημαντικά τις δυνατότητες αυτής της συνάρτησης.

SELECT POWER(10, 2) X1, POWER(100, 1/2) X2,

POWER(1000, 1/3) X3, POWER(1000, -1/3) X4

ΑΠΟ DUAL

Χ1 X2 X3 Χ4
100 10 10 0,1

Σε ορισμένες περιπτώσεις, ενδέχεται να προκύψει εξαίρεση κατά την κλήση αυτής της συνάρτησης. Για παράδειγμα:

SELECT POWER(-100, 1/2) X2

ΑΠΟ DUAL

Σε αυτήν την περίπτωση, επιχειρείται να υπολογιστεί η τετραγωνική ρίζα ενός αρνητικού αριθμού, η οποία θα έχει ως αποτέλεσμα το σφάλμα ORA-01428 "Επιχείρημα εκτός εύρους".

Συνάρτηση SQRT(n)

Αυτή η συνάρτηση επιστρέφει την τετραγωνική ρίζα του αριθμού n. Για παράδειγμα:

SELECT SQRT(100) X

ΑΠΟ DUAL

Συναρτήσεις EXP(n) και LN(n).

Η συνάρτηση EXP αυξάνει το e στην ισχύ n και η συνάρτηση LN υπολογίζει τον φυσικό λογάριθμο του n (το n πρέπει να είναι μεγαλύτερο από μηδέν). Παράδειγμα:

SELECT EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

Οι εκλογές πλησιάζουν, που σημαίνει ότι σήμερα θα εκλέξουμε περιφερειάρχη. Ή μάλλον, θέστε ένα εμπόδιο στους υποψηφίους να προχωρήσουν στον επόμενο γύρο. Πρώτα όμως πρέπει να ορίσουμε τους όρους.

Τι είναι η εγγυημένη επιλογή στην SQL;Ας υποθέσουμε ότι η συνθήκη ερωτήματος για έναν πίνακα συγκρίνει ένα πεδίο με μια μεταβλητή. Ανάλογα με την τιμή αυτής της μεταβλητής, το ερώτημα μπορεί να επιστρέψει ή να μην επιστρέψει σειρές από τον πίνακα. Εάν μια τιμή μεταβλητής πέσει έτσι ώστε οι σειρές από τον πίνακα να μην επιστρέφονται, τότε για αυτήν την περίπτωση πρέπει να δημιουργηθεί ειδικά ένα προκαθορισμένο αριστερό αποτέλεσμα. Δηλαδή, σε κάθε περίπτωση, ένα γενικό αίτημα θα πρέπει να είναι εγγυημένο για να επιστραφεί κάτι. Ο ίδιος ο όρος προέρχεται από εδώ. Ωστόσο, η εργασία περιπλέκεται από το γεγονός ότι αντί για ένα απλό κελί με μια τιμή, πρέπει να έχουμε εγγύηση ότι θα επιστρέψουμε μια πλήρη συμβολοσειρά.

Παρουσιάζω τα στοιχεία από την Κεντρική Εκλογική Επιτροπή. Ο πρώτος γύρος της ψηφοφορίας ολοκληρώθηκε με αυτά τα αποτελέσματα

δημιουργία πίνακα επιλογής όπως με t (αναγνωριστικό, όνομα, επάγγελμα, ψήφοι) ως (επιλέξτε 1, "Incorruptible Amoral Chistorukovich", "prosecutor", 9867 from dual union all select 2, "Effective Budget Osvoilovich", "businessman", 8650 from dual union all select 3, "Truthful Chtodat Napisailovich", "spaper editor", 745 from dual union all select 4, "Beautiful Lucifera Feoktistovna", "Abbess", 234 from dual union all Select 5, "Khrensgory Ktotakoy Niktognez", "Khrensgory Ktotakoy Niktognez", " δασκάλα αγροτικού σχολείου", 3 από διπλό) επιλέξτε * από t; Αλλαγή επιλογής πίνακα προσθήκη πρωτεύοντος κλειδιού (αναγνωριστικό).
Το αρχικό ερώτημα που καθορίζει εάν οι υποψήφιοι θα περάσουν στον επόμενο γύρο είναι εξαιρετικά απλό:
επιλέξτε * από την εκλογή όπου ψήφοι > :bound
Ας υποθέσουμε ότι το εμπόδιο εισόδου είναι 8.000 ψήφοι. Συνδυάζοντας αυτόν τον αριθμό με:bound, παίρνουμε

Τι γίνεται όμως αν το όριο συμμετοχής είναι 10.000, δηλαδή πάνω από το μέγιστο αριθμό ψήφων; Τότε είναι προφανές ότι κανένας από τους παραπάνω υποψήφιους δεν περνά στον επόμενο γύρο. Σε αυτή την περίπτωση εγκαθιδρύεται δικτατορία και ο γάτος Συνταγματάρχης γίνεται αυτόματα κυβερνήτης της περιοχής. Ακολουθούν μερικοί από τους τρόπους ανάθεσης:

Μέθοδος 1.ΕΝΩΣΗ ΟΛΑ τα τραπέζια με αυτοσυγκεντρωτικά

Με t ως (επιλογή * από εκλογές όπου ψήφοι > :δεσμευμένοι) επιλέξτε αναγνωριστικό, όνομα, επάγγελμα, ψήφοι από t union επιλέξτε 0, "Συνταγματάρχης", "γάτα", null από t έχοντας καταμέτρηση(*) = 0 σειρά κατά ψήφους περιγραφ

Μέθοδος 2. UNION ALL τραπέζια με DUAL
με t ως (επιλογή * από εκλογές όπου ψήφοι > : δεσμευμένοι) επιλέξτε αναγνωριστικό, όνομα, επάγγελμα, ψήφοι από t ένωση όλα επιλέξτε 0, "Συνταγματάρχης", "γάτα", μηδενική από διπλή όπου δεν υπάρχει (επιλέξτε null από t) σειρά με ψήφους dec

Μέθοδος 3. LEFT JOIN τραπέζια με DUAL
επιλέξτε nvl(e.id, 0) id, nvl2(e.id, e.name, "Colonel") name, nvl2(e.id, e.profession, "cat") επάγγελμα, e.votes from dual d left συμμετάσχετε στις εκλογές e στις ε.ψηφοφορίες >
για περιπτώσεις που ο πίνακας δεν έχει μοναδικό πεδίο NOT NULL
επιλέξτε nvl2(e.rowid, e.id, 0) id, nvl2(e.rowid, e.name, "Colonel") όνομα, nvl2(e.rowid, e.profession, "cat") επάγγελμα, e.votes από διπλό d αριστερά συμμετάσχετε στις εκλογές e στις e.votes > :δεσμευμένη σειρά κατά e.votes desc

Μέθοδος 4.Μοντέλο με μια γάτα.
επιλέξτε αναγνωριστικό, όνομα, επάγγελμα, ψήφους από εκλογές όπου ψήφοι > :δεσμευμένη διάσταση μοντέλου από μέτρα (rownum rn) μέτρα (αναγνωριστικό, όνομα, επάγγελμα, ψήφοι) κανόνες (όνομα = nvl2(αναγνωριστικό, όνομα, "Συνταγματάρχης"), επάγγελμα = nvl2 (id, επάγγελμα, "γάτα"), id = nvl(id, 0)) σειρά κατά ψήφους desc

Παρακάτω είναι το εγγυημένο αποτέλεσμα κατά το δέσιμο με πολύ υψηλό φράγμα 10.000

Είναι σαφές ότι εάν ορίσετε την αρχική μπάρα σε 8000, τότε και αυτά τα ερωτήματα θα λειτουργήσουν σωστά.

Αυτα για τωρα. Όλες οι ομοιότητες μεταξύ ονομάτων χαρακτήρων και πραγματικών προσώπων θεωρούνται τυχαίες.

Για λύσεις σε ορισμένα άλλα κοινά προβλήματα SQL, βλ



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: