Содержание

DATE — Учебник SQL — Schoolsw3.com


❮ Назад Далее ❯


DATE

Самое сложное при работе с датами — это убедиться, что формат даты, которую вы пытаетесь вставить, совпадает с форматом столбца даты в базе данных.

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


Типы данных даты

MySQL поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:

  • DATE — формат YYYY-MM-DD
  • DATETIME — формат: YYYY-MM-DD HH:MI:SS
  • TIMESTAMP — формат: YYYY-MM-DD HH:MI:SS
  • YEAR — формат YYYY или YY

SQL Server поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:

  • DATE — формат YYYY-MM-DD
  • DATETIME — формат: YYYY-MM-DD HH:MI:SS
  • SMALLDATETIME — формат: YYYY-MM-DD HH:MI:SS
  • TIMESTAMP — формат: уникальное число

Примечание: Типы дат выбираются для столбца при создании новой таблицы в базе данных!


Работа с датами

Вы можете легко сравнить две даты, если нет никакого компонента времени!

Предположим, что у нас есть следующая таблица «Orders»:

OrderIdProductNameOrderDate
1Geitost2008-11-11
2Camembert Pierrot2008-11-09
3Mozzarella di Giovanni2008-11-11
4Mascarpone Fabioli2008-10-29

Теперь мы хотим выбрать записи с порядковым номером «2008-11-11» из приведенной выше таблицы.

Мы используем следующую инструкцию SELECT:

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

Результирующий набор будет выглядеть следующим образом:

OrderIdProductNameOrderDate
1Geitost2008-11-11
3Mozzarella di Giovanni2008-11-11

Теперь предположим, что таблица «Orders» выглядит следующим образом (обратите внимание на компонент time в столбце «OrderDate»):

OrderIdProductNameOrderDate
1Geitost2008-11-11 13:23:44
2Camembert Pierrot2008-11-09 15:45:21
3Mozzarella di Giovanni2008-11-11 11:12:01
4Mascarpone Fabioli2008-10-29 14:56:59

Если мы используем тот же оператор SELECT, что и выше:

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

Мы не получим никакого результата! Это происходит потому, что запрос ищет только даты без временной части.

Совет: Чтобы ваши запросы были простыми и удобными в обслуживании, не допускайте компонентов времени в ваших датах!

❮ Назад Далее ❯

sql server — Промежуточные даты в sql

Попробуйте такой вариант. Немного добавил данных:

iduserIdDateSummWallet
1721320N
2721320T
37215-20N
47216-20T
5261510N
6261510T
72618-10T
82621-10N
9101220,00N
1010127,00T
11101220,00N
121015-40,00N
131014-3,00T
141016-4,00T

Код:

-- Задаём период
DECLARE
  @Date1 DATETIME = '20220101',
  @Date2 DATETIME = '20220131'
-- Создаём табличку с тестовыми данными
DECLARE
  @MovementTable TABLE (
      Id INT IDENTITY(1,1),
      UserId INT,
      MoveDate DATETIME, -- нехорошо всё-таки имя столбца date называть, лучше в конце переименуем
      Summ MONEY,
      Wallet CHAR(1)
  )
-- Наполняем тестовыми данными
INSERT @MovementTable
SELECT * FROM (VALUES
  (72, '20220113', 20, 'N'),
  (72, '20220113', 20, 'T'),
  (72, '20220115', -20, 'N'),
  (72, '20220116', -20, 'T'),
  (26, '20220115', 10, 'N'),
  (26, '20220115', 10, 'T'),
  (26, '20220118', -10, 'T'),
  (26, '20220121', -10, 'N'),
  (101, '20220102', 20, 'N'),
  (101, '20220102', 7, 'T'),
  (101, '20220102', 20, 'N'),
  (101, '20220105', -40, 'N'),
  (101, '20220104', -3, 'T'),
  (101, '20220106', -4, 'T')
) T(UserId, MoveDate, Summ, Wallet)
-- просматривает содержимое тестовых данных, потом удалить
SELECT * FROM @MovementTable
-- Собственно сам запрос
;WITH GenDates AS(
    SELECT @Date1 CalcDate
    UNION ALL
    SELECT CalcDate + 1
    FROM GenDates
    WHERE CalcDate < @Date2
)
SELECT 
  MT.
Id, -- ид записи в исходной таблице GroupT.UserId, MT.CalcDate AS [Date], -- вот тут уже можно переименовать, если этого ворд ждёт MT.Summ, GroupT.Wallet FROM ( -- для каждой пары UserId-Wallet ищём диапазон дат SELECT UserId, Wallet, MIN(MoveDate)MinDate, MAX(MoveDate)MaxDate FROM @MovementTable MT GROUP BY UserId, Wallet ) GroupT CROSS APPLY( -- соединяем с последовательностью дат в этом диапазоне SELECT MT.*, GD.CalcDate FROM GenDates GD LEFT JOIN @MovementTable MT ON GroupT.UserId = MT.UserId AND GroupT.Wallet = MT.Wallet AND MT.MoveDate = GD.CalcDate WHERE GD.CalcDate BETWEEN GroupT.MinDate AND GroupT.MaxDate ) MT -- сортируем ORDER BY GroupT.UserId, GroupT.Wallet, MT.CalcDate, MT.Id OPTION (MAXRECURSION 3650)-- 10 лет думаю хватит :)

Результат:

IdUserIdDateSummWallet
5262022-01-15 00:00:00.00010,00N
NULL262022-01-16 00:00:00.
000
NULLN
NULL262022-01-17 00:00:00.000NULLN
NULL262022-01-18 00:00:00.000NULLN
NULL262022-01-19 00:00:00.000NULLN
NULL262022-01-20 00:00:00.000NULLN
8262022-01-21 00:00:00.000-10,00N
6262022-01-15 00:00:00.00010,00T
NULL262022-01-16 00:00:00.000NULLT
NULL262022-01-17 00:00:00.000NULLT
7262022-01-18 00:00:00.000-10,00T
1722022-01-13 00:00:00.00020,00N
NULL722022-01-14 00:00:00. 000NULLN
3722022-01-15 00:00:00.000-20,00N
2722022-01-13 00:00:00.00020,00T
NULL722022-01-14 00:00:00.000NULLT
NULL722022-01-15 00:00:00.000NULLT
4722022-01-16 00:00:00.000-20,00T
91012022-01-02 00:00:00.00020,00N
111012022-01-02 00:00:00.00020,00N
NULL1012022-01-03 00:00:00.000NULLN
NULL1012022-01-04 00:00:00.000NULLN
121012022-01-05 00:00:00.000-40,00N
101012022-01-02 00:00:00. 0007,00T
NULL1012022-01-03 00:00:00.000NULLT
131012022-01-04 00:00:00.000-3,00T
NULL1012022-01-05 00:00:00.000NULLT
141012022-01-06 00:00:00.000-4,00T

Функции даты в SQL Server и MySQL

❮ Предыдущая Далее ❯


Даты SQL

Самое сложное при работе с датами — убедиться, что формат даты, которую вы пытаетесь вставить, соответствует формату столбца даты в базе данных.

Пока ваши данные содержат только дату, ваши запросы будут работать должным образом. Однако, если задействована временная часть, она получает сложнее.


Типы данных даты SQL

MySQL поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:

  • ДАТА — формат ГГГГ-ММ-ДД
  • ДАТАВРЕМЯ — формат: ГГГГ-ММ-ДД ЧЧ:МИ:СС
  • TIMESTAMP — формат: ГГГГ-ММ-ДД ЧЧ:МИ:СС
  • ГОД — формат ГГГГ или ГГ

SQL Server поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:

  • ДАТА — формат ГГГГ-ММ-ДД
  • ДАТАВРЕМЯ — формат: ГГГГ-ММ-ДД ЧЧ:МИ:СС
  • SMALLDATETIME — формат: ГГГГ-ММ-ДД ЧЧ:МИ:СС
  • TIMESTAMP — формат: уникальный номер

Примечание: Типы дат выбираются для столбца при создании новой таблицы в базе данных!


SQL Работа с датами

Посмотрите на следующую таблицу:

Заказы Таблица

Идентификатор заказа Название продукта Дата заказа
1 Гейтост 11. 11.2008
2 Камамбер Пьеро 09.11.2008
3 Моцарелла ди Джованни 11.11.2008
4 Маскарпоне Фабиоли 29.10.2008

Теперь мы хотим выбрать записи с OrderDate «2008-11-11» из таблицы выше.

Мы используем следующий оператор SELECT :

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

Набор результатов будет выглядеть следующим образом:

OrderId

Название продукта Дата заказа
1 Гейтост 11.11.2008
3 Моцарелла ди Джованни 11.11.2008

Примечание: Две даты можно легко сравнить, если нет временной составляющей!

Теперь предположим, что таблица «Заказы» выглядит так (обратите внимание на добавлен компонент времени в столбце «Дата заказа»):

OrderId Название продукта Дата заказа
1 Гейтост 11-11-2008 13:23:44
2 Камамбер Пьеро 09. 11.2008 15:45:21
3 Моцарелла ди Джованни 11-11-2008 11:12:01
4 Маскарпоне Фабиоли 2008-10-29 14:56:59

Если мы используем тот же оператор SELECT , что и выше:

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

, мы не получим никакого результата! Это связано с тем, что запрос ищет только даты без временной части.

Совет: Чтобы ваши запросы были простыми и легкими в обслуживании, не используйте компоненты времени в датах, если в этом нет необходимости!

❮ Предыдущий Следующий ❯


ВЫБОР ЦВЕТА



Лучшие учебники
Учебник по HTML
Учебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3.CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery

3 902 Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3. CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery

Основные примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery

FORUM | О

W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования, куки-файлы и политика конфиденциальности.

Copyright 1999-2023 Refsnes Data. Все права защищены.
W3Schools использует W3.CSS.

Типы данных и функции даты и времени — SQL Server (Transact-SQL)

  • Статья
  • 7 минут на чтение

Применяется к: SQL Server База данных SQL Azure Azure SQL Управляемый экземпляр Azure Synapse Analytics

Разделы этой статьи охватывают все типы данных и функции даты и времени Transact-SQL.

  • Типы данных даты и времени
  • Функции даты и времени
    • Функции, возвращающие системные значения даты и времени
    • Функции, возвращающие части даты и времени
    • Функции, которые возвращают значения даты и времени из своих частей
    • Функции, возвращающие значения даты и разницы во времени
    • Функции, изменяющие значения даты и времени
    • Функции, которые устанавливают или возвращают функции формата сеанса
    • Функции, проверяющие значения даты и времени
  • Статьи, связанные с датой и временем

Типы данных даты и времени

Типы данных даты и времени Transact-SQL перечислены в следующей таблице:

Тип данных Формат Диапазон Точность Размер хранилища (байты) Определяемая пользователем точность долей секунды Смещение часового пояса
время чч:мм:сс[. nnnnnn] 00:00:00.0000000 до 23:59:59.9999999 100 наносекунд от 3 до 5 Да
дата ГГГГ-ММ-ДД 0001-01-01 по 9999-12-31 1 день 3
малая дата и время ГГГГ-ММ-ДД чч:мм:сс 1900-01-01 по 2079-06-06 1 минута 4
дата-время ГГГГ-ММ-ДД чч:мм:сс[.nnn] 1753-01-01 по 9999-12-31 0,00333 секунды 8
дата-время2 ГГГГ-ММ-ДД чч:мм:сс[.nnnnnn] 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 100 наносекунд от 6 до 8 Да
смещение даты и времени ГГГГ-ММ-ДД чч:мм:сс[.нннннн] [+|-]чч:мм 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59. 9999999 (в формате UTC) 100 наносекунд от 8 до 10 Да Да

Примечание

Тип данных rowversion в Transact-SQL не является типом данных даты или времени. отметка времени является устаревшим синонимом для rowversion .

Функции даты и времени

В следующих таблицах перечислены функции даты и времени Transact-SQL. Дополнительные сведения о детерминизме см. в разделе Детерминированные и недетерминированные функции.

Функции, возвращающие системные значения даты и времени

Transact-SQL извлекает все системные значения даты и времени из операционной системы компьютера, на котором работает экземпляр SQL Server.

Более точные системные функции даты и времени

Начиная с SQL Server 2008 (10.0.x), компонент Database Engine извлекает значения даты и времени с помощью Windows API GetSystemTimeAsFileTime(). Точность зависит от аппаратного обеспечения компьютера и версии Windows, на которой работает экземпляр SQL Server. Этот API имеет фиксированную точность в 100 наносекунд. Используйте Windows API GetSystemTimeAdjustment() для определения точности.

Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
SYSDATETIME SYSDATETIME ( ) Возвращает значение datetime2(7) , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение не включает смещение часового пояса. дата/время2(7) Недетерминированный
SYSDATETIMEOFFSET SYSDATETIMEOFFSET ( ) Возвращает значение datetimeoffset(7) , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение включает смещение часового пояса. смещение даты и времени(7) Недетерминированный
SYSUTCDATETIME SYSUTCDATETIME ( ) Возвращает значение datetime2(7) , содержащее дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в виде времени UTC (Всемирное скоординированное время). дата/время2(7) Недетерминированный
Функции системной даты и времени более низкой точности
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
CURRENT_TIMESTAMP CURRENT_TIMESTAMP Возвращает значение datetime , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение не включает смещение часового пояса. дата-время Недетерминированный
ПОЛУЧИТЬ ДАТУ ПОЛУЧИТЬДАТУ ( ) Возвращает значение datetime , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Возвращаемое значение не включает смещение часового пояса. дата-время Недетерминированный
ПОЛУЧИТЬ ДАТУ ПОЛУЧИТЬ ДАТУ ( ) Возвращает дату и время , содержащее дату и время компьютера, на котором работает экземпляр SQL Server. Функция возвращает значения даты и времени в виде времени UTC (Всемирное скоординированное время). дата-время Недетерминированный

Функции, возвращающие части даты и времени

Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
DATE_BUCKET DATE_BUCKET ( датапарт , номер , дата , происхождение ) Возвращает значение, соответствующее началу каждого сегмента даты и времени из метки времени, определенной параметром источника , или значение источника по умолчанию 1900-01-01 00:00:00. 000 , если параметр источника не указано. Тип возвращаемого значения зависит от аргумента, предоставленного для даты . Недетерминированный
ДАТАИМЯ ДАТАИМЯ ( датачасть , дата ) Возвращает строку символов, представляющую указанную датучасть указанной даты. нварчар Недетерминированный
ДАТАЧАСТЬ DATEPART ( датапарт , дата ) Возвращает целое число, представляющее указанную часть даты из указанных дата . внутр. Недетерминированный
ДАТЕТРУНК DATETRUNC ( дата, часть , дата, ) Возвращает входную дату , усеченную до указанной части даты . Тип возвращаемого значения зависит от аргумента, предоставленного для даты . Недетерминированный
ДЕНЬ ДЕНЬ ( дата ) Возвращает целое число, представляющее дневную часть указанного числа 9.0619 дата . внутр. Детерминированный
МЕСЯЦ МЕСЯЦ ( дата ) Возвращает целое число, представляющее месячную часть указанной даты . внутр. Детерминированный
ГОД ГОД ( дата ) Возвращает целое число, представляющее часть года указанной даты . ряд Детерминированный

Функции, возвращающие значения даты и времени из своих частей

Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
DATEFROMPARTS DATEFROMPARTS ( год , месяц , день ) Возвращает значение даты для указанного года, месяца и дня. дата Детерминированный
ДАТАВРЕМЯ2ОТ ЧАСТЕЙ DATETIME2FROMPARTS ( год , месяц , день , час , минут , секунд , дробей0, точность 1) Возвращает значение datetime2 для указанной даты и времени с указанной точностью. дата-время2 ( точность ) Детерминированный
ДАТАВРЕМЯ ОТ ЧАСТЕЙ DATETIMEFROMPARTS ( год , месяц , день , час , минут , секунд , миллисекунд ) Возвращает значение datetime для указанной даты и времени. дата-время Детерминированный
DATETIMEOFFSETFROMPARTS DATETIMEOFFSETFROMPARTS ( year , month , day , hour , minute , seconds , fractions , hour_offset , minute_offset , precision ) Возвращает значение datetimeoffset для указанной даты и времени с указанными смещениями и точностью. смещение даты и времени ( точность ) Детерминированный
SMALLDATETIMEFROMPARTS SMALLDATETIMEFROMPARTS ( год , месяц , день , час , минут ) Возвращает значение smalldatetime для указанных даты и времени. малая дата и время Детерминированный
TIMEFROMPARTS TIMEFROMPARTS ( час , минут , секунд , дробей , точность ) Возвращает время значение для указанного времени с указанной точностью. время( точность ) Детерминированный

Функции, возвращающие значения даты и разницы во времени

Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
РАЗНИЦА ДАТЫ DATEDIFF ( дата, часть , дата начала , дата окончания ) Возвращает количество дат или временных границ datepart , пересекаемых между двумя указанными датами. внутр. Детерминированный
DATEDIFF_BIG DATEDIFF_BIG ( datepart , startdate , enddate ) Возвращает количество дат или временных границ datepart , пересекаемых между двумя указанными датами. большой Детерминированный

Функции, изменяющие значения даты и времени

Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
ДАТАДОБАВИТЬ DATEADD ( датачасть , номер , дата ) Возвращает новое значение datetime , добавляя интервал к указанному дата часть указанной дата . Тип данных аргумента даты Детерминированный
КОНМЕСЯЦ КОНМЕСЯЦА ( дата_начала [ месяц_до_добавления ] ) Возвращает последний день месяца, содержащего указанную дату, с необязательным смещением. Тип возвращаемого значения — это тип аргумента start_date или, альтернативно, тип данных date . Детерминированный
ПЕРЕКЛЮЧАТЕЛЬ SWITCHOFFSET ( DATETIMEOFFSET , часовой пояс ) SWITCHOFFSET изменяет смещение часового пояса значения DATETIMEOFFSET и сохраняет значение UTC. datetimeoffset с дробной точностью DATETIMEOFFSET Детерминированный
TODATETIMEOFFSET TODATETIMEOFFSET (выражение , часовой пояс ) TODATETIMEOFFSET преобразует значение datetime2 в значение datetimeoffset. TODATETIMEOFFSET интерпретирует значение datetime2 по местному времени для указанного часового пояса. datetimeoffset с дробной точностью аргумента datetime Детерминированный

Функции, которые устанавливают или возвращают функции формата сеанса

Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
@@DATEFIRST @@DATEFIRST Возвращает текущее значение для сеанса SET DATEFIRST. крошечный Недетерминированный
УСТАНОВИТЬ ПЕРВУЮ ДАТУ УСТАНОВИТЬ ДАТУПЕРВЫЙ { номер | @ номер_вар } Устанавливает первый день недели в число от 1 до 7. Неприменимо Неприменимо
УСТАНОВИТЬ ФОРМАТ ДАТЫ УСТАНОВИТЬ ФОРМАТ ДАТЫ { формат | @ format_var } Устанавливает порядок частей даты (месяц/день/год) для ввода данных datetime или smalldatetime . Неприменимо Неприменимо
@@ЯЗЫК @@ЯЗЫК Возвращает название используемого языка. @@LANGUAGE не является функцией даты или времени. Однако настройка языка может повлиять на вывод функций даты. Неприменимо Неприменимо
НАСТРОЙКА ЯЗЫКА УСТАНОВИТЬ ЯЗЫК { [ N ] язык | @ language_var } Задает языковую среду для сеанса и системных сообщений. SET LANGUAGE не является функцией даты или времени. Однако настройка языка влияет на вывод функций даты. Неприменимо Неприменимо
sp_helplanguage sp_helplanguage [ [ @language = ] язык ] Возвращает информацию о форматах даты для всех поддерживаемых языков. sp_helplanguage не является хранимой процедурой даты или времени. Однако настройка языка влияет на вывод функций даты. Неприменимо Неприменимо

Функции, проверяющие значения даты и времени

Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм
ИСДАТА ISDATE (выражение ) Определяет, имеет ли входное выражение datetime или smalldatetime допустимое значение даты или времени. внутр. ISDATE является детерминированным, используется только с функцией CONVERT, когда указан параметр стиля CONVERT и когда стиль не равен 0, 100, 9, или 109.
Артикул Описание
ФОРМАТ Возвращает значение, отформатированное в указанном формате и с дополнительными культурными параметрами. Используйте функцию FORMAT для форматирования дат/времени и числовых значений в виде строк с учетом региональных настроек.
ПРИведение и ПРЕОБРАЗОВАНИЕ (Transact-SQL) Предоставляет информацию о преобразовании значений даты и времени в строковые литералы и из них, а также в других форматах даты и времени.
Запись международных операторов Transact-SQL Содержит рекомендации по переносу баз данных и приложений баз данных, использующих операторы Transact-SQL с одного языка на другой или поддерживающих несколько языков.

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

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