CodeGym /Kurslar /SQL SELF /Tarix formatlarının çevrilməsi

Tarix formatlarının çevrilməsi

SQL SELF
Səviyyə , Dərs
Mövcuddur

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()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()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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION