Database və frontend dünyası tez-tez tarixlərin necə görünməli olduğu barədə razılaşmır. PostgreSQL tarixləri DATE, TIMESTAMP və ya hətta TIMESTAMPTZ kimi saxlaya bilər, amma bu format həmişə istifadəçiyə göstərmək üçün uyğun olmur. Məsələn, standart 2023-10-01 12:30:45 əvəzinə dizaynerlər 01 oktyabr 2023 il, 12:30 görmək istəyə bilər. Bəzən isə tarix hesabat və ya API üçün xüsusi formatda olmalıdır.
PostgreSQL-də tarixləri sətir formatına və əksinə çevirmək üçün TO_CHAR() və TO_DATE() funksiyaları var.
TO_CHAR() funksiyası
TO_CHAR() — vaxt məlumatını oxunaqlı sətir formatına çevirmək lazım olanda ən yaxşı dostundur. O, tarix və ya zaman damğasını qəbul edir və onu göstərdiyin formata uyğun formatlayır.
Sintaksis
TO_CHAR(value, format)
value— çevirmək istədiyin tarix və ya zaman damğası.format— tarixi necə göstərmək istədiyini bildirən format şablonu olan sətir.
Format nümunələri
| Format şablonu | Məna | Nümunə |
|---|---|---|
YYYY |
İl | 2023 |
MM |
Ay (01-dən 12-yə qədər rəqəm) | 10 |
MONTH |
Ayın adı (böyük hərflərlə) | OCTOBER |
DAY |
Həftənin günü (böyük hərflərlə) | SUNDAY |
DD |
Ayın günü | 01 |
HH24 |
24-saatlıq formatda saat | 15 |
MI |
Dəqiqə | 45 |
SS |
Saniyə | 30 |
Tam format siyahısını PostgreSQL-in rəsmi sənədlərində tapa bilərsən.
TO_CHAR() istifadə nümunələri
Hesabat üçün tarix formatlama
SELECT TO_CHAR(NOW(), 'DD.MM.YYYY') AS formatted_date;
-- Nəticə: '09.10.2023'
Vaxtı 12-saatlıq formatda göstərmək
SELECT TO_CHAR(NOW(), 'HH12:MI AM') AS formatted_time;
-- Nəticə: '03:45 PM'
Ayı sözlə göstərmək
SELECT TO_CHAR(NOW(), 'Month') AS month_name;
-- Nəticə: 'October '
Diqqət et: PostgreSQL sonda boşluq əlavə edir. Bu, feature-dir, bug deyil! Boşluqları silmək üçün TRIM() funksiyasından istifadə et:
SELECT TRIM(TO_CHAR(NOW(), 'Month')) AS trimmed_month_name;
Custom format yaratmaq
SELECT TO_CHAR(NOW(), 'YYYY/MM/DD HH24:MI:SS') AS custom_format;
-- Nəticə: '2023/10/09 15:45:30'
İstifadəçi interfeysi üçün formatlama
SELECT TO_CHAR(NOW(), 'DD "oktyabr" YYYY il') AS user_friendly_date;
-- Nəticə: '09 oktyabr 2023 il'
TO_DATE() funksiyası
TO_DATE() əksini edir: sətiri alır və onu DATE tipinə çevirir. Bu nə üçün lazımdır? Məsələn, istifadəçi 01-10-2023 formatında tarix daxil edə bilər və PostgreSQL-in "başa düşməsi" lazımdır ki, bu hansı tarixdir.
Sintaksis
TO_DATE(value, format)
value— tarixi saxlayan sətir.format— sətirin formatını təsvir edən şablon sətir.<
TO_DATE() istifadə nümunələri
Sətiri tarixə çevirmək
SELECT TO_DATE('01-10-2023', 'DD-MM-YYYY') AS date_value;
-- Nəticə: '2023-10-01' (data tipi: DATE)
Sətir tarixini cədvəldəki tarixlə müqayisə etmək
Tutaq ki, appointments adlı cədvəlimiz var və orada appointment_date adlı DATE tipli sütun var. İstifadəçi tarixi sətir kimi daxil edir:
SELECT *
FROM appointments
WHERE appointment_date = TO_DATE('2023-10-09', 'YYYY-MM-DD');
Yanlış format
Vacibdir: əgər sətirin formatı şablonla uyğun gəlmirsə, error olacaq! Məsələn:
SELECT TO_DATE('01/10/2023', 'DD-MM-YYYY');
-- Error: yanlış input formatı
İstifadəçi məlumatlarını yoxlamaq
Tutaq ki, sifarişləri saxlamaq üçün cədvəl yaradırsan və tarix istifadəçi tərəfindən daxil edilir:
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
order_date DATE
);
-- Sətiri tarixə çevirib məlumat əlavə etmək
INSERT INTO orders (order_date)
VALUES (TO_DATE('10-09-2023', 'MM-DD-YYYY'));
Praktiki nümunələr
Hesabat formatlama. sales cədvəlində satış tarixi sale_date sütununda (TIMESTAMP tipi) saxlanılır. Hesabatda tarixləri DD.MM.YYYY formatında göstərmək lazımdır.
-- Nümunə məlumatlar
CREATE TABLE sales (
sale_id SERIAL PRIMARY KEY,
sale_date TIMESTAMP
);
INSERT INTO sales (sale_date)
VALUES
('2023-10-01 15:30:00'),
('2023-10-02 10:15:00'),
('2023-10-03 12:45:00');
-- Hesabat
SELECT sale_id,
TO_CHAR(sale_date, 'DD.MM.YYYY') AS formatted_date
FROM sales;
İstifadəçi məlumatlarının çevrilməsi. Tutaq ki, istifadəçi tarixi MM/DD/YYYY formatında sətir kimi daxil edir. Onu DATE-ə çevirmək və sistemdə saxlamaq lazımdır.
INSERT INTO sales (sale_date)
VALUES (TO_TIMESTAMP('10/01/2023 15:30:00', 'MM/DD/YYYY HH24:MI:SS'));
Tipik səhvlər və tövsiyələr
Yanlış format. Çox vaxt istifadəçi sətiri ilə şablon uyğun gəlmir və error çıxır. Məsələn, istifadəçi 01-10-2023 daxil edib, amma format MM/DD/YYYY göstərilibsə, PostgreSQL error verəcək. Tövsiyə: istifadəçi inputunu SQL-ə ötürməzdən əvvəl həmişə yoxla.
TO_CHAR() formatlarında boşluqlar. MONTH kimi bəzi formatlar boşluq əlavə edir. Problem olarsa, TRIM() funksiyasından istifadə et.
Sətirlərin parse olunmasında səhvlər. Sətirdə gözlənilməz simvol və ya format varsa, PostgreSQL onu çevirə bilməyəcək. Tövsiyə: database-ə əlavə etməzdən əvvəl regular expressions və ya əlavə yoxlamalardan istifadə et.
Zaman formatlarının düzgün istifadə olunmaması. Məsələn, TIMESTAMP üçün DATE şablonunu istifadə etməyə çalışmaq. Tövsiyə: istifadə etdiyin data tiplərinin tapşırığına uyğun olduğuna əmin ol.
TO_CHAR() və TO_DATE() funksiyaları vaxt məlumatı ilə işləmək üçün böyük imkanlar açır. Hesabatlar üçün rahat formatlar yarada, istifadəçi inputunu çevirə və SQL sorğularını daha oxunaqlı edə bilərsən. Real həyatda bu funksiyalar məlumatların vizuallaşdırılması, hesabatların yaradılması, digər sistemlərlə inteqrasiya və istifadəçi interfeyslərinin hazırlanmasında geniş istifadə olunur.
GO TO FULL VERSION