Как вытащить дату из datetime sql
Перейти к содержимому

Как вытащить дату из datetime sql

  • автор:

SQL — Урок 13. Функции даты и времени

Функции CURDATE() и NOW() удобно использовать для добавления в базу данных записей, использующих текущее время. В нашем магазине все поставки и продажи используют текущее время. Поэтому для добавления записей о поставах, и продажах удобно использовать функцию CURDATE(). Например, пусть в наш магазин пришел товар, давайте добавим информацию об этом в таблицу Поставка (incoming):

INSERT INTO incoming (id_vendor, date_incoming) VALUES (‘2’, curdate());
SELECT id_vendor, date_incoming FROM incoming;

Предположим, мы ошиблись при вводе даты для первого поставщика, давайте уменьшим его дату на одни сутки:

SELECT id_vendor, ADDDATE(date_incoming, INTERVAL -1 DAY) FROM incoming WHERE id_vendor=1;

В качестве значения value могут выступать не только дни, но и недели (WEEK), месяцы (MONTH), кварталы (QUARTER) и годы (YEAR). Давайте для пример уменьшим дату поставки для второго поставщика на 1 неделю:

SELECT id_vendor, ADDDATE(date_incoming, INTERVAL -1 WEEK) FROM incoming WHERE id_vendor=2;

В нашей таблице Поставки (incoming) мы использовали для столбца Дата поставки (date_incoming) тип date. Как вы помните из урока 2, этот тип данных предназначен для хранения только даты. А вот если бы мы использовали тип datatime, то у нас отображалась бы не только дата, но и время. Тогда мы могли бы использовать функцию ADDDATE и для времени. В качестве значения value в этом случае могут выступать секунды (SECOND), минуты (MINUTE), часы (HOUR) и их комбинации:
минуты и секунды (MINUTE_SECOND),
часы, минуты и секунды (HOUR_SECOND),
часы и минуты (HOUR_MINUTE),
дни, часы, минуты и секунды (DAY_SECOND),
дни, часы и минуты (DAY_MINUTE),
дни и часы (DAY_HOUR),
года и месяцы (YEAR_MONTH).
Например, давайте к дате 15 апреля 2011 года две минуты первого прибавим 2 часа 45 минут:

SELECT ADDDATE(‘2011-04-15 00:02:00′, INTERVAL ’02:45’ HOUR_MINUTE);
SELECT SUBDATE(‘2011-04-15 00:02:00′, INTERVAL ’23:53’ HOUR_MINUTE);
SELECT PERIOD_ADD(201102, 2);

FRAC_SECOND — микросекунды
SECOND — секунды
MINUTE — минуты
HOUR — часы
DAY — дни
WEEK — недели
MONTH — месяцы
QUARTER — кварталы
YEAR — годы

SELECT TIMESTAMPADD(DAY, 2, ‘2011-04-02’);
SELECT TIMEDIFF(‘2011-04-17 23:50:00’, ‘2011_04-16 14:50:00’);
SELECT date_incoming, CURDATE(), DATEDIFF(CURDATE(), date_incoming) FROM incoming WHERE id_vendor=1;
SELECT PERIOD_DIFF(201108, 201001);

FRAC_SECOND — микросекунды
SECOND — секунды
MINUTE — минуты
HOUR — часы
DAY — дни
WEEK — недели
MONTH — месяцы
QUARTER — кварталы
YEAR — годы

SELECT TIMESTAMPDIFF(DAY, ‘2011-04-02’, ‘2011-04-17’) AS days, TIMESTAMPDIFF(HOUR, ‘2011-04-16 20:14:00’, ‘2011-04-17 23:58:20’) AS houres;

Как вывести дату в sql

Чтобы вывести дату в SQL, используйте функцию DATE_FORMAT() . Синтаксис функции выглядит следующим образом:

DATE_FORMAT(date, format) 

где date — это дата, которую вы хотите отформатировать, а format — это строка формата, которая определяет, как должна быть отформатирована дата.

Например, чтобы вывести текущую дату в формате ГГГГ-ММ-ДД, используйте следующий запрос:

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); 

В результате выполнения этого запроса вы увидите дату в формате ГГГГ-ММ-ДД, например, 2023-04-08.

Вы также можете использовать функции для работы с датами, такие как NOW() , CURDATE() , CURTIME() , чтобы получить текущую дату и время, текущую дату и текущее время соответственно.

Некоторые примеры форматирования дат:

  • ‘%Y-%m-%d’ — ГГГГ-ММ-ДД (например, 2023-04-08)
  • ‘%Y-%m-%d %H:%i:%s’ — ГГГГ-ММ-ДД ЧЧ:ММ:СС (например, 2023-04-08 13:30:45)
  • ‘%d-%m-%Y’ — ДД-ММ-ГГГГ (например, 08-04-2023)

Обратите внимание, что форматирование даты может отличаться в зависимости от используемой СУБД.

datetime (Transact-SQL)

Определяет дату, включающую время дня с долями секунды в 24-часовом формате.

Используйте для новых проектов типы данных time, date, datetime2 и datetimeoffset. Эти типы соответствуют стандарту языка SQL. Их проще переносить на другие платформы. Типы time, datetime2 и datetimeoffset обеспечивают большую точность секунд. datetimeoffset обеспечивает поддержку часовых поясов для приложений, развертываемых по всему миру.

Описание

Свойство Значение
Синтаксис datetime
Использование DECLARE @MyDatetime datetime

ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12.

Обозначение ДД состоит из двух цифр, представляющих день указанного месяца, и принимает значения от 01 до 31 в зависимости от месяца.

Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 00 до 23.

Обозначение мм состоит из двух цифр, представляющих минуту, и принимает значения от 00 до 59.

Обозначение сс состоит из двух цифр, представляющих секунду, и принимает значения от 00 до 59.

Поддерживаемые форматы строковых литералов для типа данных datetime

В представленных ниже таблицах приводятся поддерживаемые форматы строковых литералов для типа данных datetime. За исключением ODBC, строковые литералы типа datetime заключаются в одинарные кавычки (‘), например ‘string_literaL’. Если язык среды не us_english, строковые литералы должны иметь формат N’string_literaL’.

число разделитель число разделитель число [время] [время]

При использовании языковой настройки us_english порядком по умолчанию для даты является mdy (МДГ). Порядок даты можно изменить с помощью инструкции SET DATEFORMAT.

Некоторые рекомендации по применению алфавитных форматов даты:

1. Заключайте дату и время в одинарные кавычки (‘). Для всех языков, кроме английского, используйте «N’».

2. Символы, заключенные в квадратные скобки, являются необязательными.

3. Если указать две последние цифры года, значения, меньшие двух последних цифр значения параметра конфигурации сервера two digit year cutoff, будут относиться к столетию года усечения. Значения, большие или равные двум последним цифрам этого параметра, относятся к столетию, предшествующему столетию года усечения. Например, если значение параметра two digit year cutoff равно 2050 (по умолчанию), то год, обозначенный двумя цифрами 25, интерпретируется как 2025, а год, обозначенный двумя цифрами 50, — как 1950. Во избежание неоднозначности используйте четырехзначную запись года.

4. Если не указано число месяца, подразумевается первое число месяца.

Чтобы использовать формат ISO 8601, необходимо указать каждый элемент в этом формате, включая T, двоеточие (:) и точку (.), которые отображаются в этом формате.

Квадратные скобки показывают, что доли секунд не являются обязательными. Временной компонент указан в 24-часовом формате.

Символ T указывает на начало временной части значения datetime.

Без разделителей Описание
ГГГГММДД чч:мм:сс[.ммм]

Escape-последовательности меток времени ODBC имеют следующий формат: < literal_typeconstant_value‘ >:

literal_type определяет тип escape-последовательности. Метки времени имеют три описателя literal_type:
1) d = только дата
2) t = только время
3) ts = метка времени (время + дата)

Округление типа данных datetime до долей секунды

Значения типа datetime округляются в большую сторону до 0,000, 0,003 или 0,007 секунды, как показано в таблице, представленной ниже.

Указанное пользователем значение Значение, хранимое системой
01/01/98 23:59:59.999 1998-01-02 00:00:00.000
01/01/98 23:59:59.995

Соответствие стандартам ANSI и ISO 8601

datetime не удовлетворяет стандартам ANSI и ISO 8601.

Преобразование данных типа Date и Time

При преобразовании в типы данных даты и времени SQL Server отбрасывает все значения, которые не распознаются как значения даты или времени. Сведения об использовании функций CAST и CONVERT c данными типов даты и времени см. в статье Функции CAST и CONVERT (Transact-SQL).

Преобразование других типов даты и времени в тип данных datetime

В этом разделе описывается, что происходит при преобразовании других типов даты и времени в тип данных datetime.

При преобразовании из типа date копируются год, месяц и день. Для компонента времени устанавливается значение 00:00:00.000. Следующий код демонстрирует результаты преобразования значения date в значение datetime .

DECLARE @date date = '12-21-16'; DECLARE @datetime datetime = @date; SELECT @datetime AS '@datetime', @date AS '@date'; --Result --@datetime @date ------------------------- ---------- --2016-12-21 00:00:00.000 2016-12-21 

В приведенном выше примере используется формат даты, зависящий от региона (ММ-ДД-ГГ).

DECLARE @date date = '12-21-16'; 

Вы можете обновить пример в соответствии с форматом вашего региона.

Вы также можете дополнить пример форматом даты, соответствующим стандарту ISO 8601 (ГГГГ-ММ-ДД). Пример:

DECLARE @date date = '2016-12-21'; DECLARE @datetime datetime = @date; SELECT @datetime AS '@datetime', @date AS '@date'; 

При преобразовании из time(n) компонент времени копируется, а для компонента даты устанавливается значение 1900-01-01. Если точность в долях секунды значения time(n) больше трех цифр, значение будет усечено. Следующий пример показывает результаты преобразования значения time(4) в значение datetime .

DECLARE @time time(4) = '12:10:05.1237'; DECLARE @datetime datetime = @time; SELECT @datetime AS '@datetime', @time AS '@time'; --Result --@datetime @time ------------------------- ------------- --1900-01-01 12:10:05.123 12:10:05.1237 

При преобразовании из типа smalldatetime копируются часы и минуты. Секунды и доли секунд устанавливаются в значение 0. Следующий код демонстрирует результаты преобразования значения smalldatetime в значение datetime .

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32'; DECLARE @datetime datetime = @smalldatetime; SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime'; --Result --@datetime @smalldatetime ------------------------- ----------------------- --2016-12-01 12:32:00.000 2016-12-01 12:32:00 

При преобразовании из типа datetimeoffset(n) копируются компоненты даты и времени. Часовой пояс усекается. Если точность в долях секунды для значения datetimeoffset(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения datetimeoffset(4) в значение datetime .

DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0'; DECLARE @datetime datetime = @datetimeoffset; SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset'; --Result --@datetime @datetimeoffset ------------------------- ------------------------------ --1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0 

При преобразовании из типа datetime2(n) копируются дата и время. Если точность в долях секунды для значения datetime2(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения datetime2(4) в значение datetime .

DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237'; DECLARE @datetime datetime = @datetime2; SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2'; --Result --@datetime @datetime2 ------------------------- ------------------------ --1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 

Примеры

В приведенном ниже примере сравниваются результаты приведения строкового типа к каждому из типов данных date и time.

SELECT CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 'smalldatetime' ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 'datetime2' ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 'datetimeoffset'; 
Тип данных Выходные данные
time 12:35:29. 1234567
date 2007-05-08
smalldatetime 2007-05-08 12:35:00
datetime 2007-05-08 12:35:29.123
datetime2 2007-05-08 12:35:29. 1234567
datetimeoffset 2007-05-08 12:35:29.1234567 +12:15

Как извлечь из datetime дату sql

Чтобы извлечь дату из значения datetime в SQL, можно использовать функцию DATE() . Синтаксис функции выглядит следующим образом:

DATE(datetime) 

где datetime — это значение, из которого нужно извлечь дату.

Например, если у вас есть значение datetime 2023-04-08 14:30:00, то для извлечения даты используйте следующий запрос:

SELECT DATE('2023-04-08 14:30:00'); 

В результате выполнения этого запроса вы увидите дату 2023-04-08.

Также вы можете использовать функцию DATE_FORMAT() для форматирования даты в нужный формат. Например, чтобы отформатировать дату 2023-04-08 14:30:00 в формат ГГГГ-ММ-ДД, используйте следующий запрос:

SELECT DATE_FORMAT('2023-04-08 14:30:00', '%Y-%m-%d'); 

В результате выполнения этого запроса вы увидите дату 2023-04-08.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *