Sana ma'lumot turi
Kirish: Ushbu qo'llanmada siz PostgreSQL DATE ma'lumot turi va undan jadvallarda sanalarni (vaqtsiz) saqlash uchun qanday foydalanishni o'rganasiz.
PostgreSQLda faqat sanalarni (soat, daqiqa va soniyalarsiz) saqlash uchun DATE ma'lumot turidan foydalaniladi.
DATE turidagi ustunni yaratish sintaksisi:
CREATE TABLE table_name (
column_name DATE,
...
);
DATE ustuni miloddan avvalgi 4713-yildan to milodiy 5874897-yilgacha bo'lgan sanalarni saqlashi mumkin. PostgreSQL har bir sana qiymati uchun xotiradan 4 bayt joy ajratadi.
Sana ustuniga standart qiymat belgilash uchun DEFAULT cheklovidan foydalaniladi:
CREATE TABLE table_name (
column_name DATE DEFAULT default_date
);
Joriy sanani avtomatik ravishda standart qiymat qilib o'rnatish uchun CURRENT_DATE funksiyasidan foydalanishingiz mumkin:
CREATE TABLE table_name (
column_name DATE DEFAULT CURRENT_DATE
);
PostgreSQL turli xil sana formatlarini qabul qiladi, lekin doimo xalqaro ISO 8601 (YYYY-MM-DD) formatidan foydalanish tavsiya etiladi. Masalan, 2024-12-31 2024-yil 31-dekabrni bildiradi.
Quyidagi misolda ombordagi tovarlar qoldig'ini o'zgartirish tarixini saqlovchi stock_adjustments jadvali yaratiladi:
CREATE TABLE stock_adjustments (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
product_name VARCHAR(255) NOT NULL,
quantity INT NOT NULL,
adjustment_date DATE NOT NULL DEFAULT CURRENT_DATE
);
Ushbu jadvaldagi adjustment_date ustuniga standart qiymat qilib bugungi sana (CURRENT_DATE) belgilangan.
Agar qator kiritishda sanani ko'rsatmasak, PostgreSQL avtomatik tarzda joriy sanani yozadi:
INSERT INTO
stock_adjustments (product_name, quantity)
VALUES
('iPhone 16 Pro', 5)
RETURNING *;
Natija:
id | product_name | quantity | adjustment_date
----+---------------+----------+-----------------
1 | iPhone 16 Pro | 5 | 2024-12-08
Qator kiritishda sanani o'zingiz aniq belgilashingiz ham mumkin:
INSERT INTO
stock_adjustments (product_name, quantity, adjustment_date)
VALUES
('Galaxy S23 Ultra', 2, '2024-12-09')
RETURNING *;
Natija:
id | product_name | quantity | adjustment_date
----+------------------+----------+-----------------
2 | Galaxy S23 Ultra | 2 | 2024-12-09
EXTRACT() funksiyasi sanadan kun, oy yoki yil kabi alohida qismlarni ajratib beradi:
SELECT
product_name,
quantity,
adjustment_date,
extract(day from adjustment_date) AS d,
extract(month from adjustment_date) AS m,
extract(year from adjustment_date) AS y
FROM
stock_adjustments
ORDER BY
adjustment_date;
Natija:
product_name | quantity | adjustment_date | d | m | y
------------------+----------+-----------------+---+----+------
iPhone 16 Pro | 5 | 2024-12-08 | 8 | 12 | 2024
Galaxy S23 Ultra | 2 | 2024-12-09 | 9 | 12 | 2024
Sanani o'zingiz xohlagan matnli formatda aks ettirish uchun TO_CHAR() funksiyasidan foydalanasiz:
SELECT
product_name,
quantity,
adjustment_date,
to_char(adjustment_date, 'Month dd, yyyy') AS formatted_date
FROM
stock_adjustments
ORDER BY
adjustment_date;
Natija:
product_name | quantity | adjustment_date | formatted_date
------------------+----------+-----------------+--------------------
iPhone 16 Pro | 5 | 2024-12-08 | December 08, 2024
Galaxy S23 Ultra | 2 | 2024-12-09 | December 09, 2024
Sanaga kunlar sonini qo'shish uchun + operatoridan, ayirish uchun esa - operatoridan foydalaniladi:
date + days
date - days
Masalan, sanaga 3 kun qo'shib tasdiqlash sanasini (approval_date) hisoblaymiz:
SELECT
product_name,
quantity,
adjustment_date,
adjustment_date + 3 AS approval_date
FROM
stock_adjustments
ORDER BY
approval_date;
Natija:
product_name | quantity | adjustment_date | approval_date
------------------+----------+-----------------+---------------
iPhone 16 Pro | 5 | 2024-12-08 | 2024-12-11
Galaxy S23 Ultra | 2 | 2024-12-09 | 2024-12-12
DATE ma'lumot turidan foydalaning.CURRENT_DATE dan foydalaning.EXTRACT(), formatlash uchun esa TO_CHAR() funksiyasi ishlatiladi.+ va - operatorlari orqali kunlar hisob-kitobini oson bajarish mumkin.