Η μορφοποίηση ημερομηνίας μετατρέπει μια ημερομηνία σε κείμενο με τη μορφή που επιλέγεις, όπως 03/15/2026 ή Thursday, January 15. Κάθε βάση δεδομένων έχει τη δική της συνάρτηση γι' αυτό, και τα παραδείγματα καλύπτουν PostgreSQL, MySQL, SQLite και SQL Server.
Πώς να μορφοποιήσεις ημερομηνίες στην SQL
Δώσε στη συνάρτηση μια ημερομηνία και ένα string μορφής. Οι κωδικοί στο string μορφής αντιστοιχούν σε μέρη της ημερομηνίας, και όλα τα υπόλοιπα αντιγράφονται όπως είναι. Στην SQLite η συνάρτηση είναι η strftime(), και οι κωδικοί της ξεκινούν με %:
strftime(format, date)
SELECT strftime('%m/%d/%Y', '2026-03-15');
-- Output: 03/15/2026
SELECT strftime('%I:%M %p', '2026-03-15 14:30:00');
-- Output: 02:30 PM
Σε μια στήλη, η ίδια ημερομηνία μπορεί να εμφανιστεί σε όσες μορφές χρειάζεσαι:
-- Input: orders
-- order_id | order_date
-- ---------+--------------------
-- 1 | 2026-01-15 09:42:00
-- 2 | 2026-03-02 16:05:00
SELECT
order_date,
strftime('%Y-%m-%d', order_date) AS iso_date,
strftime('%m/%d/%Y', order_date) AS us_date,
strftime('%d/%m/%Y', order_date) AS european_date
FROM orders;
-- Output:
-- order_date | iso_date | us_date | european_date
-- --------------------+------------+------------+--------------
-- 2026-01-15 09:42:00 | 2026-01-15 | 01/15/2026 | 15/01/2026
-- 2026-03-02 16:05:00 | 2026-03-02 | 03/02/2026 | 02/03/2026
Αυτοί είναι οι κωδικοί που θα χρησιμοποιείς πιο συχνά, μαζί με το τι δίνει ο καθένας για 2026-03-15 14:30:45:
| Κωδικός | Σημασία | Παράδειγμα |
|---|---|---|
%Y |
Έτος με 4 ψηφία | 2026 |
%m |
Μήνας (01-12) | 03 |
%d |
Ημέρα του μήνα (01-31) | 15 |
%H |
Ώρα, 24ωρη μορφή (00-23) | 14 |
%I |
Ώρα, 12ωρη μορφή (01-12) | 02 |
%p |
AM ή PM | PM |
%M |
Λεπτό (00-59) | 30 |
%S |
Δευτερόλεπτο (00-59) | 45 |
%w |
Ημέρα της εβδομάδας (0-6, η Κυριακή είναι 0) | 0 |
Κανόνες που πρέπει να ξέρεις
-
Η SQLite δεν έχει κωδικούς για ονόματα ημερών ή μηνών. Κωδικοί όπως
%aκαι%Bκάνουν τηνstrftime()να επιστρέφει NULL. Αντί γι' αυτό, αντιστοίχισε το%wή το%mσε όνομα μεCASE(δες την ενότητα για την ημέρα της εβδομάδας παρακάτω). -
Το αποτέλεσμα είναι κείμενο. Η σύγκριση ή η ταξινόμηση μορφοποιημένων ημερομηνιών συγκρίνει strings, κάτι που συμπίπτει με τη χρονολογική σειρά μόνο όταν το έτος είναι πρώτο:
-- Input: sales
-- id | sale_date | amount
-- ---+------------+-------
-- 1 | 2025-11-20 | 89.0
-- 2 | 2026-01-08 | 120.0
-- 3 | 2026-03-04 | 64.5
-- Wrong: '11/2025' > '02/2026' is true, because '1' > '0'
SELECT * FROM sales
WHERE strftime('%m/%Y', sale_date) > '02/2026';
-- Output:
-- id | sale_date | amount
-- ---+------------+-------
-- 1 | 2025-11-20 | 89.0
-- 3 | 2026-03-04 | 64.5
-- Right: put the year first
SELECT * FROM sales
WHERE strftime('%Y-%m', sale_date) > '2026-02';
-- Output:
-- id | sale_date | amount
-- ---+------------+-------
-- 3 | 2026-03-04 | 64.5
-
NULL μέσα, NULL έξω. Η
strftime('%Y-%m-%d', NULL)επιστρέφει NULL. Τύλιξέ τη σεCOALESCE()για να εμφανίσεις κάτι άλλο, όπως'No date'. -
Φιλτράρισε με βάση την ημερομηνία, μορφοποίησέ τη για εμφάνιση. Το
WHERE order_date >= '2026-01-01' AND order_date < '2027-01-01'επιστρέφει τις ίδιες γραμμές με τοWHERE strftime('%Y', order_date) = '2026', αλλά μόνο το πρώτο μπορεί να χρησιμοποιήσει index στοorder_date.
Εναλλακτική σύνταξη
Οι PostgreSQL, MySQL και SQL Server έχουν η καθεμία τη δική της συνάρτηση και τους δικούς της κωδικούς:
-- PostgreSQL: TO_CHAR(value, pattern)
-- (FM stops it padding the day name to 9 characters)
SELECT TO_CHAR(TIMESTAMP '2026-01-15 09:42:00', 'FMDay, MM/DD/YYYY HH24:MI');
-- Output: Thursday, 01/15/2026 09:42
-- MySQL: DATE_FORMAT(value, pattern)
-- (%i is the minute; %M would be the month name)
SELECT DATE_FORMAT('2026-01-15 09:42:00', '%W, %m/%d/%Y %H:%i');
-- Output: Thursday, 01/15/2026 09:42
-- SQL Server: FORMAT(value, pattern)
-- (MM is the month, mm the minute)
SELECT FORMAT(CAST('2026-01-15 09:42:00' AS datetime2), 'dddd, MM/dd/yyyy HH:mm');
-- Output: Thursday, 01/15/2026 09:42
-- Older SQL Server code uses CONVERT with a style number (101 is mm/dd/yyyy)
SELECT CONVERT(VARCHAR(10), CAST('2026-01-15' AS date), 101);
-- Output: 01/15/2026
Πότε πρέπει να μορφοποιείς ημερομηνίες;
Μορφοποίησε μια ημερομηνία όταν πρέπει να εμφανιστεί ή να ομαδοποιηθεί ως κείμενο. Οι περισσότερες χρήσεις ανήκουν σε μία από αυτές τις τέσσερις.
Εμφάνιση ημερομηνιών σε τυπική μορφή
Χρησιμοποίησε ISO 8601 (YYYY-MM-DD) για αρχεία και APIs, MM/DD/YYYY για αναγνώστες στις ΗΠΑ και DD/MM/YYYY για το μεγαλύτερο μέρος της Ευρώπης. Η μορφοποίηση αφαιρεί επίσης την ώρα όταν θέλεις μόνο την ημερομηνία.
Ομαδοποίηση γραμμών ανά μήνα ή έτος
Κράτα μόνο το μέρος της ημερομηνίας που θέλεις, όπως %Y για το έτος ή %Y-%m για τον μήνα, και κάνε group by με το αποτέλεσμα για να πάρεις ετήσια ή μηνιαία σύνολα.
Ημερομηνίες που διαβάζονται εύκολα
Συνδύασε κωδικούς με λέξεις για ετικέτες, υπενθυμίσεις και emails. Το «03/16 at 02:30 PM» διαβάζεται καλύτερα από το «2026-03-16 14:30:00».
Δουλειά με την ημέρα της εβδομάδας
Το %w δίνει την ημέρα της εβδομάδας ως αριθμό από 0 (Κυριακή) έως 6 (Σάββατο). Φιλτράρισε με αυτό για να βρεις καθημερινές ή Σαββατοκύριακα, ή αντιστοίχισέ το σε όνομα με CASE.
Πραγματικά παραδείγματα μορφοποίησης ημερομηνιών
Χρονοσήμανση export με ώρες ISO 8601
Ένα API θέλει timestamps όπως 2026-03-15T08:05:12Z. Οι ώρες στο audit_log αποθηκεύονται σε UTC, οπότε βάλε το T και το Z γύρω από τους κωδικούς (SQLite):
-- Input: audit_log
-- id | action | logged_at
-- ---+--------+--------------------
-- 1 | login | 2026-03-15 08:05:12
-- 2 | export | 2026-03-15 14:30:45
-- 3 | logout | 2026-03-15 17:58:03
SELECT
id,
action,
strftime('%Y-%m-%dT%H:%M:%SZ', logged_at) AS logged_at_iso
FROM audit_log;
-- Output:
-- id | action | logged_at_iso
-- ---+--------+---------------------
-- 1 | login | 2026-03-15T08:05:12Z
-- 2 | export | 2026-03-15T14:30:45Z
-- 3 | logout | 2026-03-15T17:58:03Z
Μέτρηση εγγραφών ανά μήνα
Ομαδοποίησε τους χρήστες με βάση τον μήνα εγγραφής τους (PostgreSQL). Το YYYY-MM κρατά τους μήνες σε χρονολογική σειρά:
-- Input: users
-- id | name | signup_date
-- ---+------------+------------
-- 1 | Ana Lima | 2026-01-08
-- 2 | Ben Okafor | 2026-01-27
-- 3 | Chloe Park | 2026-02-14
-- 4 | Dev Mehta | 2026-03-03
-- 5 | Elle Novak | 2026-03-30
SELECT
TO_CHAR(signup_date, 'YYYY-MM') AS month,
COUNT(*) AS signups
FROM users
GROUP BY TO_CHAR(signup_date, 'YYYY-MM')
ORDER BY month;
-- Output:
-- month | signups
-- --------+--------
-- 2026-01 | 2
-- 2026-02 | 1
-- 2026-03 | 2
Επιβεβαίωση κράτησης
Γράψε ολογράφως την ημέρα και τον μήνα σε ένα μήνυμα επιβεβαίωσης (SQL Server):
-- Input: bookings
-- guest_name | booking_time
-- ------------+--------------------
-- Priya Patel | 2026-03-16 14:30:00
-- Liam Murphy | 2026-03-18 09:15:00
SELECT
guest_name,
FORMAT(booking_time, 'dddd, MMMM d') + ' at ' + FORMAT(booking_time, 'h:mm tt') AS confirmation
FROM bookings;
-- Output:
-- guest_name | confirmation
-- ------------+-------------------------------
-- Priya Patel | Monday, March 16 at 2:30 PM
-- Liam Murphy | Wednesday, March 18 at 9:15 AM
Βρες την πιο πολυάσχολη ημέρα της εβδομάδας
Μέτρησε τις παραγγελίες με βάση το όνομα της ημέρας που έγιναν (MySQL):
-- Input: orders
-- order_id | order_date
-- ---------+--------------------
-- 1 | 2026-03-07 10:12:00
-- 2 | 2026-03-09 16:40:00
-- 3 | 2026-03-14 11:05:00
-- 4 | 2026-03-16 09:20:00
-- 5 | 2026-03-21 13:45:00
SELECT
DATE_FORMAT(order_date, '%W') AS weekday,
COUNT(*) AS order_count
FROM orders
GROUP BY weekday
ORDER BY order_count DESC;
-- Output:
-- weekday | order_count
-- ---------+------------
-- Saturday | 3
-- Monday | 2
Περισσότερα για τη μορφοποίηση ημερομηνιών
Σε αυτό το blog:
-
Οδηγός μορφοποίησης ημερομηνιών στην PostgreSQL: περισσότερα μοτίβα
TO_CHAR - Οδηγός SQL DATEDIFF: ο χρόνος ανάμεσα σε δύο ημερομηνίες
-
Οδηγός εισαγωγής ημερομηνιών στην SQL: η αντίθετη κατεύθυνση, από κείμενο σε ημερομηνίες με
STR_TO_DATE()και παρόμοιες - PostgreSQL: Πώς να επιλέξεις μόνο καθημερινές: φιλτράρισμα ανά ημέρα της εβδομάδας
- Οδηγός SQL GROUP BY: ομαδοποίηση γραμμών σε μηνιαία ή ετήσια σύνολα
- Οδηγός εντολής SQL CASE: αντιστοίχιση αριθμών ημερών σε ονόματα
Επίσημη τεκμηρίωση:
- PostgreSQL: Συναρτήσεις μορφοποίησης τύπων δεδομένων
- MySQL: DATE_FORMAT()
- SQLite: Συναρτήσεις ημερομηνίας και ώρας
- SQL Server: FORMAT και CAST και CONVERT
Το Beekeeper Studio είναι ένα δωρεάν & open source GUI για βάσεις δεδομένων
Το καλύτερο εργαλείο για SQL queries & επεξεργασία που έχω χρησιμοποιήσει ποτέ. Μου δίνει ό,τι χρειάζομαι για να διαχειρίζομαι τη βάση δεδομένων μου. - ⭐⭐⭐⭐⭐ Mit
Το Beekeeper Studio είναι γρήγορο, εύχρηστο και κατανοητό με την πρώτη ματιά. Υποστηρίζει πάρα πολλές βάσεις δεδομένων και δουλεύει άψογα σε Windows, Mac και Linux.
Τι λένε οι χρήστες για το Beekeeper Studio
«Το Beekeeper Studio αντικατέστησε πλήρως την παλιά μου ροή εργασίας με SQL. Είναι γρήγορο, εύχρηστο και κάνει τη δουλειά με βάσεις δεδομένων ξανά ευχάριστη.»
«Έχω δοκιμάσει πολλά GUI για βάσεις δεδομένων, αλλά το Beekeeper βρίσκει την τέλεια ισορροπία ανάμεσα σε δυνατότητες και απλότητα. Απλώς δουλεύει.»