CodeGym /Kurslar /SQL SELF /Cari tarixi və vaxtı almaq üçün funksiyalar: NOW()...

Cari tarixi və vaxtı almaq üçün funksiyalar: NOW(), CURRENT_DATE, CURRENT_TIME

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

PostgreSQL-də cari zaman dəyərləri ilə işləmək üçün bir neçə daxili funksiya var. Bu funksiyalar, məsələn, qeyd yaradılma vaxtını avtomatik izləmək, cari tarixə əsaslanan hesabatlar qurmaq və ya hadisənin müəyyən dövrdə baş verib-vermədiyini yoxlamaq kimi işlərdə faydalıdır. Gəlin əsas üç funksiyaya baxaq: NOW(), CURRENT_DATECURRENT_TIME.

NOW(): cari tarix və vaxtı almaq

NOW() funksiyası cari tarix və vaxtı TIMESTAMP WITH TIME ZONE formatında qaytarır. Yəni, nəticə serverin saat qurşağını da nəzərə alır.

Nümunə:

SELECT NOW();
-- Nəticə: 2025-05-25 14:30:45.761523+03

Diqqət elə ki, nəticədə bunlar var:

  • tarix (2025-05-25),
  • vaxt (14:30:45.761523),
  • saat qurşağı (+03).

Əgər sənə saat qurşağı lazım deyilsə, nəticəni TIMESTAMP-a çevirə bilərsən:

SELECT NOW()::TIMESTAMP;
-- Nəticə: 2025-05-25 14:30:45.761523

CURRENT_DATE: cari tarixi almaq

CURRENT_DATE funksiyası yalnız cari tarixi qaytarır, vaxt olmadan. Qaytardığı tip — DATE.

Nümunə:

SELECT CURRENT_DATE;
-- Nəticə: 2025-05-25

Bu, vaxtı nəzərə almaq lazım olmayan hallarda, məsələn, yaş hesablamalarında və ya məlumatları günlərə görə qruplaşdıranda rahatdır.

CURRENT_TIME: cari vaxtı almaq

CURRENT_TIME funksiyası cari vaxtı TIME WITH TIME ZONE formatında qaytarır. Əgər saat qurşağı lazım deyilsə, nəticəni TIME-a çevirə bilərsən.

Nümunə:

SELECT CURRENT_TIME;
-- Nəticə: 14:30:45.761523+03

SELECT CURRENT_TIME::TIME;
-- Nəticə: 14:30:45.761523

Funksiyaların istifadə nümunələri

Gəlin bu funksiyaların faydalı ola biləcəyi bir neçə praktik nümunəyə baxaq.

Qeyd yaradılma vaxtının avtomatik doldurulması

Cədvələ qeyd əlavə edəndə, çox vaxt onların yaradılma tarix və vaxtını avtomatik saxlamaq yaxşı olur. PostgreSQL-də bunu cədvəl yaradanda DEFAULT NOW() göstərməklə edə bilərsən.

Cədvəl yaratmaq nümunəsi:

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW() -- sətrin yaradılma anı
);

Qeyd əlavə etmək:

INSERT INTO orders (customer_name) VALUES ('Otto Lin');

Cədvəlin tərkibinə baxaq:

SELECT * FROM orders;

Nəticə:

id customer_name created_at
1 Otto Lin 2024-11-25 14:45:12.154678

Məlumatların tarixə görə filtrasiyası

Tutaq ki, bizdə sifarişlər cədvəli var və bu gün yaradılmış bütün sifarişləri seçmək istəyirik. Filtr üçün CURRENT_DATE funksiyasından istifadə edirik:

SELECT *
FROM orders
WHERE created_at::DATE = CURRENT_DATE;

Burada created_at::DATE çevirməsindən istifadə edirik ki, vaxtı ataq və yalnız tarixi saxlayaq.

NOW()CURRENT_TIMESTAMP arasındakı fərqlər

İlk baxışdan elə gəlir ki, NOW()CURRENT_TIMESTAMP eyni işi görür. Əslində, belədir. Sadəcə NOW() bir standartdan, CURRENT_TIMESTAMP isə başqa standartdan gəlib.

NOW() — PostgreSQL funksiyası

NOW() funksiyası PostgreSQL-in daxili funksiyasıdırTIMESTAMP WITH TIME ZONE (timestamptz) tipində dəyər qaytarır. Bu, SQL sorğusunun icrasına başlananda serverin cari vaxtıdır.

Nümunə:

SELECT NOW();

CURRENT_TIMESTAMP — SQL standartı

CURRENT_TIMESTAMPSQL standartı ilə müəyyən olunmuş ifadədir və PostgreSQL-də də TIMESTAMP WITH TIME ZONE qaytarır. Əslində, PostgreSQL CURRENT_TIMESTAMP-i NOW() ilə eyni funksiyaya yönləndirir.

Nümunə:

SELECT CURRENT_TIMESTAMP;

Praktik müqayisə

SELECT NOW(), CURRENT_TIMESTAMP;

Nəticə:

now current_timestamp
2025-05-25 14:30:45+03 2025-05-25 14:30:45+03

Hər iki dəyər eynidir, çünki sorğunun əvvəlində hesablanır.

Zaman funksiyalarının filtr şərtlərində istifadəsi

İndi isə son 7 gündə yaradılmış qeydləri seçən sorğu yazaq. Bunun üçün NOW()-dan və tarix üzərində arifmetikadan istifadə edə bilərik:

SELECT *
FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';

Eyni qaydada, cari ay üçün sifarişləri seçmək istəsək, DATE_TRUNC() funksiyasından istifadə edə bilərik ki, ayın əvvəlini və sonunu tapmaq olsun:

SELECT *
FROM orders
WHERE created_at >= DATE_TRUNC('month', NOW());

DATE_TRUNC() maraqlı funksiyadır, bu barədə bir neçə dərsdən sonra daha ətraflı danışacam :P

Praktik məsləhətlər

  • Əgər sənə saat qurşağı ilə dəqiq vaxt lazımdırsa, NOW() və ya CURRENT_TIMESTAMP istifadə et.
  • Sadəcə tarix kifayət edirsə (məsələn, yaş hesablaması və ya müəyyən gün üçün analiz), CURRENT_DATE istifadə et.
  • CURRENT_TIME adətən hesabatlarda və ya interfeyslərdə, tapşırığa nə qədər vaxt getdiyini göstərmək üçün istifadə olunur.

Növbəti dərsdə EXTRACT()AGE() funksiyalarından istifadə edərək tarix və vaxt hissələrini necə çıxarmağı öyrənəcəyik. Onlarla, məsələn, insanın yaşını asanlıqla hesablamaq və ya məlumatları günlər, aylar və illər üzrə işləmək olar.

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