В тази статия ще разгледаме работата с дати в PostgreSQL, включително различните типове и формати на данни за дати, техните функции и начините как да се справяте с тях в ежедневната си рутина. Ще използваме dbForge Studio за PostgreSQL, за да илюстрираме примерите.
Можете да използвате дати и времеви марки за анализ на данни и съхранение на данни, тъй като те ви позволяват да определите кога действително се е случило събитие. Трудното при датите е, че техните формати варират в различните страни, така че това може да бъде доста предизвикателна задача за начинаещи в управлението на бази данни. Типът на данните и форматът на колоната за дата трябва винаги да съответстват на информацията, въведена от потребителя. Освен това трябва да промените формата на датата, за да отговаря на предпочитанията на вашите потребители. Postgres е в състояние да обработва широк спектър от формати на данни.
Съдържание
- Общ преглед на типа данни на PostgreSQL DATE
- Използване на текущата дата като стойност по подразбиране
- Функции на Postgres DATE
- Използване на функцията NOW() за получаване на текущата дата
- Използване на функцията TO_CHAR() – изведете стойността на датата в определен формат
- Използване на оператора минус за получаване на интервала между две дати
- Използване на функцията AGE() за получаване на разликата в датата в години, месеци и дни
- Използване на функцията EXTRACT() за получаване на година, тримесечие, месец, седмица, ден от стойност за дата
- Използване на TO_TIMESTAMP() за преобразуване на низ във времева марка
- Резюме
Общ преглед на типа данни на PostgreSQL DATE
DATE
типът данни в PostgreSQL се използва за съхраняване на дати във формат ГГГГ-ММ-ДД (например 2022-03-24). Необходими са му 4 байта, за да съхранява стойност на дата в колона. Имайте предвид, че най-ранната възможна дата е 4713 г. пр. н. е., а най-късната възможна дата е 5874897 г. сл. Хр.
Много е важно да запазите четливостта на кода на етапа на писането му. dbForge Studio за PostgreSQL може да се похвали с удобен и интуитивен PostgreSQL Formatter. Като се грижи за форматирането на кода, проверката на синтаксиса и завършването на кода, функцията за форматиране на Postgres SQL, вградена в dbForge Studio за PostgreSQL, ще ви позволи да останете фокусирани и върху работата с типа данни DATE.
Използване на текущата дата като стойност по подразбиране
Стойността по подразбиране в DATE
колона в база данни на Postgres може да се зададе с помощта на ключовата дума DEFAULT CURRENT DATE
, както в скрипта по-долу:
CREATE TABLE myevents (
event_id serial PRIMARY KEY,
event_details VARCHAR (255) NOT NULL,
event_date DATE NOT NULL DEFAULT CURRENT_DATE
);
INSERT INTO myevents (event_details)
VALUES('Meeting the client ABC');
SELECT * FROM myevents;
Както можете да видите, стойност за [дата на събитието] колоната се вмъква автоматично от PostgreSQL сървъра, като се използва текущата системна дата във формат ГГГГ-ММ-ДД.
Функции на Postgres DATE
Понякога е от решаващо значение да промените формата на датата или да изчислите стойностите в таблицата на PostgreSQL. Може да се наложи да направим това за потребители от различни часови зони по целия свят. В този случай SQL функциите са от решаващо значение.
Използване на функцията NOW() за получаване на текущата дата
SELECT now();
Можете да използвате двоеточие (::), за да предадете DATETIME
стойност към DATE
стойност, както е показано по-долу:
Текущата системна времева марка се връща от NOW()
функция. Синтаксисът е следният:
SELECT now()::date;
Използване на функцията TO_CHAR() – извеждане на стойността на датата в определен формат
За да представите изхода на стойност за дата на Postgres в определен формат, TO_CHAR()
функцията е полезна. Синтаксисът е следният:
TO_CHAR(expression, format)
Има два параметъра, приети от TO_CHAR()
функция:
- Въведена дата :Датата, която да се преобразува в конкретен формат.
- Формат на датата :Заместител за нова спецификация за формат на дата.
Нека видим как да конвертирате съществуващите стойности за дати от [Моите събития] таблица във формат ДД-ММ-ГГГГ.
SELECT event_details,event_date as ExistingDateformat,
to_char(event_date,'DD-MM-YYYY') As NewDateFormat FROM myevents;
За да конвертирате текущата времева марка в предпочитания формат, можете да комбинирате TO_CHAR()
и NOW()
функции.
SELECT TO_CHAR(NOW() :: DATE, 'dd-mm-yyyy');
Използване на оператора минус за получаване на интервала между две дати
За да изчислите разликата между две дати, използвайте оператора минус (-). Заявката по-долу предоставя периода от време между текущата времева марка и [дата на събитието] от Моите събития маса.
SELECT event_date,now() as currentdate,
now()-event_date as Interval FROM myevents
where event_id=2;
Можете също да изберете интервал за връщане на датата, след като изтече определено време. Разгледайте заявката по-долу:
SELECT (NOW() + interval '3 hour') AS threehourslater,
(NOW() + interval '2 day') AS Twodaylater,
(NOW() - interval '2 year') AS TwoYearBefore,
(event_date- interval '1 year') as eventdatedifference
from myevents;
Използване на функцията AGE() за получаване на разликата в датата в години, месеци и дни
С AGE()
функция, можете да получите разликата в датата в години, месеци и дни. Тази функция може да се използва за определяне на възрастта на човек. Първата стойност на датата се изважда от втората стойност на датата с тази функция, която приема две въвеждане на дата. Когато стойностите във функционалния скрипт се обърнат, резултатът е отрицателна стойност.
Нека разберем възрастта на човека, чиято дата на раждане е 1995-10-09. Синтаксисът е следният:
SELECT current_date,
AGE(timestamp '1995-10-09'::timestamp) as EmpAge;
Използване на функцията EXTRACT() за получаване на година, тримесечие, месец, седмица, ден от стойност за дата
EXTRACT()
функцията връща ден, седмица, месец, година и тримесечие от посочената стойност за дата.
Извличане на година:
SELECT EXTRACT(YEAR FROM TIMESTAMP '2022-04-09 10:30:15') as year;
Извличане на месец:
SELECT EXTRACT(Month FROM TIMESTAMP '2022-04-09 10:30:15') as Month;
Извлечете една четвърт:
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2022-04-09 10:30:15') as QUARTER;
Извлечете деня от седмицата:
SELECT EXTRACT(DOW FROM TIMESTAMP '2022-04-09 10:30:15') as DOW;
Извлечете деня от годината:
SELECT EXTRACT(DOY FROM TIMESTAMP '2022-04-09 10:30:15') as DOY;
Обърнете внимание, че dbForge Studio показва резултатите от изпълнението на заявката всеки в отделен раздел.
EXTRACT()
функцията може лесно да се комбинира с INTERVAL
. Да приемем, че искаме да зададем интервала като 5 години 8 месеца 23 дни 08 часа 10 минути и 20 секунди. Отделните стойности се връщат от EXTRACT
функция.
SELECT EXTRACT(YEAR
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(Month
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(Day
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(hour
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(Minute
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' );
Използване на TO_TIMESTAMP() за преобразуване на низ във времева марка
Можете да запазите стойностите на датите в UTC (универсален координатор на времето) и да промените часовата зона, ако е необходимо, ако искате да преобразувате времевата марка в друга часова зона.
SELECT * FROM pg_timezone_names;
За да проверите текущата часова зона, използвайте SHOW TIMEZONE
команда.
Можете да използвате AT TIME ZONE
за да получите изхода за избраната часова зона, като изберете необходимата стойност на часовата зона от pg_timezone_names таблица.
SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'America/Los_Angeles';
AT TIME ZONE
ви позволява да имате различни изходи за часови зони.
SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'America/Washington';
SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'Asia/Beijing';
SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'Europe/Kyiv';
Резюме
За да обобщим, PostgreSQL DATE
типът данни е много важен и полезен при съхраняване на дати и времеви марки в таблици, така че е доста често срещан в релационна база данни. Обхватът на тяхното използване е невероятно широк, затова е толкова важно те да са ясни за всеки потребител във всяка страна и часова зона. С различни функции на Postgres е лесно да се отговори на нуждите на потребителите, тъй като можете да променяте датите, така че да могат да се използват в определена часова зона, с определен формат и други подробности, които правят работата с такива данни много по-лесна. И накрая, ако търсите перфектна комбинация от интуитивен графичен интерфейс и разширен команден ред, който може да направи работата с DATE
типът данни е още по-приятен, dbForge Studio за PostgreSQL ще бъде полезен.