CodeGym /Kurslar /SQL SELF /Zaman intervalı ilə işləmək: INTERVAL

Zaman intervalı ilə işləmək: INTERVAL

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

Treninq bir yarım saat davam edir, iş günü — 8 saat, fasilə — 20 dəqiqə, yumurta qaynatmaq üçün isə 10 dəqiqə lazımdır. Bütün bunlar — zaman intervalı haqqındadır.

Zaman intervalları real tətbiqlərdə faydalıdır, məsələn, tapşırıqların yerinə yetirilmə müddətini hesablamaq, iki tarix arasındakı fərqi tapmaq və ya vaxt əlavə/çıxmaq lazım olanda. Amma detallara keçməzdən əvvəl, əvvəlki dərslərdə harada qaldığımızı qısa xatırlayaq.

PostgreSQL-də INTERVAL — bu xüsusi data tipidir və zaman aralığını göstərmək üçün nəzərdə tutulub. Digər zaman tiplərindən fərqli olaraq, o konkret tarix və ya vaxt saxlamır, sadəcə bir dövrü təsvir edir, məsələn: "2 gün", "3 saat", "5 dəqiqə".

INTERVAL üçün sintaksis

Intervalı bu formatda yaza bilərsən:

INTERVAL 'ədəd zaman_vahidi'

Nümunələr:

INTERVAL '2 days' -- İki gün
INTERVAL '3 hours' -- Üç saat
INTERVAL '15 minutes' -- On beş dəqiqə
INTERVAL '1 day 2 hours' -- Bir gün və iki saat

PostgreSQL müxtəlif zaman vahidlərini dəstəkləyir: year, month, day, hour, minute, second. Bunları bir ifadədə birləşdirə bilərsən.

Sorgularda intervaldan istifadə

INTERVAL data tipi xüsusilə digər zaman tipləri (DATE, TIMESTAMP) ilə birlikdə istifadə edəndə çox faydalı olur. Gəlin əsas əməliyyatlara baxaq.

Tarixə/vaxta interval əlavə etmək

Intervalı tarix və ya vaxt dəyərlərinə əlavə edə bilərsən. Məsələn:

SELECT CURRENT_DATE + INTERVAL '7 days' AS delivery_date;
-- Cari tarixdən 7 gün sonra olan tarixi alırıq

Nəticə:

delivery_date
2023-10-08

Tarixdən/vaxtdan interval çıxmaq

Əlavə etməklə yanaşı, intervalı çıxmaq da olar:

SELECT NOW() - INTERVAL '2 hours' AS two_hours_ago;
-- İki saat əvvəl olan vaxtı alırıq

Nəticə:

two_hours_ago
2023-10-01 10:00:00.000

İki tarix arasındakı fərqi hesablamaq

INTERVAL-ın güclü funksiyalarından biri də iki tarix arasındakı fərqi hesablamaqdır:

SELECT '2023-10-15'::DATE - '2023-10-01'::DATE AS days_difference;
-- İki tarix arasındakı gün sayı

Nəticə:

days_difference
14 days

Qeyd et ki, nəticə də burada zaman intervalı kimi göstərilir.

INTERVAL ilə işləməyə dair praktiki nümunələr

Çatdırılma tarixinin hesablanması. Təsəvvür et ki, internet mağazası var və çatdırılma 3-dən 7 günə qədər çəkir. Mümkün çatdırılma tarixlərini belə hesablaya bilərsən:

SELECT CURRENT_DATE + INTERVAL '3 days' AS earliest_delivery,
       CURRENT_DATE + INTERVAL '7 days' AS latest_delivery;

Nəticə:

earliest_delivery latest_delivery
2023-10-04 2023-10-08

Tapşırığın yerinə yetirilmə vaxtının hesablanması. Tutaq ki, tasks adlı cədvəlin var və hər tapşırığın başlanğıc tarixi qeyd olunub. Tapşırığın davametmə müddətini saatla nəzərə alaraq bitmə tarixini hesablamaq lazımdır:

CREATE TABLE tasks (
    task_id SERIAL PRIMARY KEY,
    task_name TEXT,
    start_time TIMESTAMP,
    duration INTERVAL
);

INSERT INTO tasks (task_name, start_time, duration)
VALUES
('Hesabat hazırla', '2023-10-01 09:00:00', INTERVAL '4 hours'),
('Tətbiqi yoxla', '2023-10-01 10:00:00', INTERVAL '2 hours 30 minutes');

SELECT task_name,
       start_time,
       start_time + duration AS end_time
FROM tasks;

Nəticə:

task_name start_time end_time
Hesabat hazırla 2023-10-01 09:00:00 2023-10-01 13:00:00
Tətbiqi yoxla 2023-10-01 10:00:00 2023-10-01 12:30:00

Yerinə yetirilmə müddətinin müqayisəsi. Bəzən bizə 3 saatdan az vaxtda yerinə yetirilən bütün tapşırıqları tapmaq lazımdır:

SELECT task_name
FROM tasks
WHERE duration < INTERVAL '3 hours';

Nəticə:

task_name
Tətbiqi yoxla

Interval ilə bağlı faydalı trüklər

Intervalın dinamik hesablanması. Intervalı digər əməliyyatlarla birləşdirmək olar. Məsələn, sütundan gün sayını götürüb intervala çevirmək:

SELECT CURRENT_DATE + (order_days || ' days')::INTERVAL AS order_due_date
FROM orders;

Intervalı string-ə çevirmək. Bəzən intervalı göstərmək üçün onu string-ə çevirmək lazım olur:

SELECT INTERVAL '2 days 3 hours'::TEXT AS interval_text;

Nəticə:

interval_text
2 days 03:00:00

INTERVAL ilə işləyərkən yayılmış səhvlər

INTERVAL ilə işləmək güclü olsa da, bəzən çətinlik yarada bilər. Tipik səhvlərdən biri — səhv formatdan istifadə etməkdir. Məsələn, INTERVAL '2 hours and 30 minutes' yazsan, səhv alacaqsan, çünki PostgreSQL "and" sözünü başa düşmür. Düzgün yazılış: INTERVAL '2 hours 30 minutes'.

Başqa bir səhv — zaman vahidini göstərməməklə bağlıdır, məsələn INTERVAL '2'. PostgreSQL "2"nin nə olduğunu anlamır, ona görə həmişə vahidi dəqiq göstər: (2 days, 2 hours).

1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
Tarix və vaxt ilə işləmək
Tarix və vaxt ilə işləmək
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION