Στον κόσμο των βάσεων δεδομένων SQL, η PostgreSQL είναι γνωστή για τη σταθερότητά της και το πλούσιο σύνολο λειτουργιών της. Μία από αυτές είναι η ισχυρή υποστήριξη για τύπους ημερομηνίας και timestamp. Σε αυτόν τον οδηγό θα δούμε πώς μορφοποιείς ημερομηνίες στην PostgreSQL, με παραδείγματα κώδικα. Ο οδηγός απευθύνεται σε software engineers και σε όποιον έχει τεχνική κατάρτιση και θέλει να διευρύνει τις γνώσεις του στην PostgreSQL.
Κατανοώντας την ημερομηνία στην PostgreSQL
Πριν δούμε πώς μορφοποιούνται οι ημερομηνίες, είναι σημαντικό να καταλάβεις πώς αναπαρίστανται στην PostgreSQL. Η PostgreSQL χρησιμοποιεί τον τύπο δεδομένων «Date» για την αποθήκευση της ημερομηνίας. Δες πώς δημιουργείς έναν πίνακα με στήλη DATE.
CREATE TABLE orders (
order_id serial PRIMARY KEY,
order_date DATE NOT NULL
);
Τώρα, ας εισάγουμε μερικά δεδομένα στον πίνακα orders.
INSERT INTO orders (order_date) VALUES
('2022-04-01'),
('2022-04-02'),
('2022-04-03');
Η PostgreSQL είναι έξυπνη και μπορεί να αναγνωρίσει μια ημερομηνία από ένα string, αν τη δώσεις σε μορφή ISO 6801.
Πώς μορφοποιείς ημερομηνίες στην PostgreSQL: Η συνάρτηση TO_CHAR
Ο βασικός τρόπος για να μορφοποιήσεις ημερομηνίες στην PostgreSQL είναι η συνάρτηση TO_CHAR. Η TO_CHAR μετατρέπει τύπους ημερομηνίας/ώρας σε string με συγκεκριμένο μοτίβο. Δες πώς χρησιμοποιείται:
TO_CHAR(date, format)
Η πλήρης λίστα με τις επιλογές μορφοποίησης υπάρχει στα docs της PostgreSQL. Αυτές είναι οι επιλογές μορφοποίησης όπως ισχύουν τον Ιανουάριο του 2024:
| Μοτίβο | Περιγραφή |
|---|---|
| HH | ώρα της ημέρας (01–12) |
| HH12 | ώρα της ημέρας (01–12) |
| HH24 | ώρα της ημέρας (00–23) |
| MI | λεπτό (00–59) |
| SS | δευτερόλεπτο (00–59) |
| MS | χιλιοστό του δευτερολέπτου (000–999) |
| US | μικροδευτερόλεπτο (000000–999999) |
| FF1 | δέκατο του δευτερολέπτου (0–9) |
| FF2 | εκατοστό του δευτερολέπτου (00–99) |
| FF3 | χιλιοστό του δευτερολέπτου (000–999) |
| FF4 | δέκατο του χιλιοστού του δευτερολέπτου (0000–9999) |
| FF5 | εκατοστό του χιλιοστού του δευτερολέπτου (00000–99999) |
| FF6 | μικροδευτερόλεπτο (000000–999999) |
| SSSS, SSSSS | δευτερόλεπτα μετά τα μεσάνυχτα (0–86399) |
| AM, am, PM or pm | ένδειξη π.μ./μ.μ. (χωρίς τελείες) |
| A.M., a.m., P.M. or p.m. | ένδειξη π.μ./μ.μ. (με τελείες) |
| Y,YYY | έτος (4 ή περισσότερα ψηφία) με κόμμα |
| YYYY | έτος (4 ή περισσότερα ψηφία) |
| YYY | τελευταία 3 ψηφία του έτους |
| YY | τελευταία 2 ψηφία του έτους |
| Y | τελευταίο ψηφίο του έτους |
| IYYY | έτος αρίθμησης εβδομάδων ISO 8601 (4 ή περισσότερα ψηφία) |
| IYY | τελευταία 3 ψηφία του έτους αρίθμησης εβδομάδων ISO 8601 |
| IY | τελευταία 2 ψηφία του έτους αρίθμησης εβδομάδων ISO 8601 |
| I | τελευταίο ψηφίο του έτους αρίθμησης εβδομάδων ISO 8601 |
| BC, bc, AD or ad | ένδειξη εποχής (χωρίς τελείες) |
| B.C., b.c., A.D. or a.d. | ένδειξη εποχής (με τελείες) |
| MONTH | πλήρες όνομα μήνα με κεφαλαία (συμπληρωμένο με κενά έως 9 χαρακτήρες) |
| Month | πλήρες όνομα μήνα με κεφαλαίο το πρώτο γράμμα (συμπληρωμένο με κενά έως 9 χαρακτήρες) |
| month | πλήρες όνομα μήνα με πεζά (συμπληρωμένο με κενά έως 9 χαρακτήρες) |
| MON | συντομογραφία μήνα με κεφαλαία (3 χαρακτήρες στα αγγλικά, το μήκος διαφέρει ανά γλώσσα) |
| Mon | συντομογραφία μήνα με κεφαλαίο το πρώτο γράμμα (3 χαρακτήρες στα αγγλικά, το μήκος διαφέρει ανά γλώσσα) |
| mon | συντομογραφία μήνα με πεζά (3 χαρακτήρες στα αγγλικά, το μήκος διαφέρει ανά γλώσσα) |
| MM | αριθμός μήνα (01–12) |
| DAY | πλήρες όνομα ημέρας με κεφαλαία (συμπληρωμένο με κενά έως 9 χαρακτήρες) |
| Day | πλήρες όνομα ημέρας με κεφαλαίο το πρώτο γράμμα (συμπληρωμένο με κενά έως 9 χαρακτήρες) |
| day | πλήρες όνομα ημέρας με πεζά (συμπληρωμένο με κενά έως 9 χαρακτήρες) |
| DY | συντομογραφία ημέρας με κεφαλαία (3 χαρακτήρες στα αγγλικά, το μήκος διαφέρει ανά γλώσσα) |
| Dy | συντομογραφία ημέρας με κεφαλαίο το πρώτο γράμμα (3 χαρακτήρες στα αγγλικά, το μήκος διαφέρει ανά γλώσσα) |
| dy | συντομογραφία ημέρας με πεζά (3 χαρακτήρες στα αγγλικά, το μήκος διαφέρει ανά γλώσσα) |
| DDD | ημέρα του έτους (001–366) |
| IDDD | ημέρα του έτους αρίθμησης εβδομάδων ISO 8601 (001–371· η 1η ημέρα του έτους είναι η Δευτέρα της πρώτης εβδομάδας ISO) |
| DD | ημέρα του μήνα (01–31) |
| D | ημέρα της εβδομάδας, από Κυριακή (1) έως Σάββατο (7) |
| ID | ημέρα της εβδομάδας ISO 8601, από Δευτέρα (1) έως Κυριακή (7) |
| W | εβδομάδα του μήνα (1–5) (η πρώτη εβδομάδα ξεκινά την πρώτη ημέρα του μήνα) |
| WW | αριθμός εβδομάδας του έτους (1–53) (η πρώτη εβδομάδα ξεκινά την πρώτη ημέρα του έτους) |
| IW | αριθμός εβδομάδας του έτους αρίθμησης εβδομάδων ISO 8601 (01–53· η πρώτη Πέμπτη του έτους ανήκει στην εβδομάδα 1) |
| CC | αιώνας (2 ψηφία) (ο εικοστός πρώτος αιώνας ξεκινά στις 2001-01-01) |
| J | Ιουλιανή ημερομηνία (ακέραιος αριθμός ημερών από τις 24 Νοεμβρίου 4714 π.Χ. στα τοπικά μεσάνυχτα· δες την Ενότητα B.7) |
| Q | τρίμηνο |
| RM | μήνας σε κεφαλαίους λατινικούς αριθμούς (I–XII· I=Ιανουάριος) |
| rm | μήνας σε πεζούς λατινικούς αριθμούς (i–xii· i=Ιανουάριος) |
| TZ | συντομογραφία ζώνης ώρας με κεφαλαία (υποστηρίζεται μόνο στην to_char) |
| tz | συντομογραφία ζώνης ώρας με πεζά (υποστηρίζεται μόνο στην to_char) |
| TZH | ώρες ζώνης ώρας |
| TZM | λεπτά ζώνης ώρας |
| OF | απόκλιση ζώνης ώρας από UTC (υποστηρίζεται μόνο στην to_char) |
Παραδείγματα μορφοποίησης ημερομηνιών
Ας ξεκινήσουμε μετατρέποντας την ημερομηνία μας σε ένα απλό, ευανάγνωστο string. Δες πώς γίνεται:
SELECT order_id, TO_CHAR(order_date, 'DD Mon YYYY') as formatted_date
FROM orders;
Το αποτέλεσμα θα είναι:
order_id | formatted_date
———+—————-
1 | 13 Jan 2024
2 | 12 Jan 2024
3 | 11 Jan 2024
4 | 10 Jan 2024
5 | 09 Jan 2024
Μπορούμε επίσης να εξάγουμε μόνο ένα μέρος της ημερομηνίας:
SELECT order_id, TO_CHAR(order_date, 'Day') as day_of_week
FROM orders;
order_id | day_of_week
———+————-
1 | Friday
2 | Thursday
3 | Wednesday
4 | Tuesday
5 | Monday
Μπορούμε ακόμα και να συνδυάσουμε μορφές, αν θέλουμε:
SELECT order_id, TO_CHAR(order_date, 'Day, DD Mon YYYY') as detailed_date
FROM orders;
order_id | detailed_date
———+————————
1 | Friday, 13 Jan 2024
2 | Thursday, 12 Jan 2024
3 | Wednesday, 11 Jan 2024
4 | Tuesday, 10 Jan 2024
5 | Monday, 09 Jan 2024
Η συνάρτηση EXTRACT
Η συνάρτηση EXTRACT σου δίνει εύκολη πρόσβαση σε όλα τα πιθανά μέρη μιας τιμής ημερομηνίας/ώρας, όπως έτος, μήνας, ημέρα κ.λπ.
SELECT order_id, EXTRACT(MONTH from order_date) as order_month
FROM orders;
order_id | order_month
———+————
1 | 1
2 | 1
3 | 1
4 | 1
5 | 1
Αυτά είναι τα βασικά της μορφοποίησης ημερομηνιών στην PostgreSQL. Αυτά τα εργαλεία σου δίνουν γερές βάσεις για να χειρίζεσαι δεδομένα ημερομηνιών. Όπως με όλα στον προγραμματισμό, το κλειδί είναι η εξάσκηση: δοκίμασε μόνος σου αυτές τις εντολές και δες τι άλλο μπορείς να σκεφτείς. Καλό coding!
Αξίζει πραγματικά να τρέξεις αυτά τα queries στο Beekeeper Studio. :-)
Το Beekeeper Studio είναι ένα δωρεάν & open source GUI για βάσεις δεδομένων
Το καλύτερο εργαλείο για SQL queries & επεξεργασία που έχω χρησιμοποιήσει ποτέ. Μου δίνει ό,τι χρειάζομαι για να διαχειρίζομαι τη βάση δεδομένων μου. - ⭐⭐⭐⭐⭐ Mit
Το Beekeeper Studio είναι γρήγορο, εύχρηστο και κατανοητό με την πρώτη ματιά. Υποστηρίζει πάρα πολλές βάσεις δεδομένων και δουλεύει άψογα σε Windows, Mac και Linux.
Τι λένε οι χρήστες για το Beekeeper Studio
«Το Beekeeper Studio αντικατέστησε εντελώς την παλιά μου ροή εργασίας με SQL. Είναι γρήγορο, εύχρηστο και κάνει τη δουλειά με βάσεις δεδομένων ξανά απολαυστική.»
«Έχω δοκιμάσει πολλά GUI για βάσεις δεδομένων, αλλά το Beekeeper πετυχαίνει την τέλεια ισορροπία ανάμεσα σε δυνατότητες και απλότητα. Απλώς δουλεύει.»