В Microsoft SQL Server 2008 есть несколько новых типов данных даты и времени, которые обеспечивают большую точность и гибкость по сравнению с традиционными типами данных. В этой статье мы рассмотрим эти новые типы данных и узнаем, как их манипулировать с помощью команд TSQL.
Функции CAST и CONVERT
Прежде чем погрузиться в новые типы данных, давайте сначала разберемся с функциями CAST и CONVERT. Эти функции позволяют нам изменять тип данных или стиль значения. Хотя обе функции служат похожей цели, CONVERT имеет дополнительную возможность изменять стиль значения.
Синтаксис для CAST выглядит так: CAST(value AS new type)
. Например, мы можем объявить переменную DATETIME и затем преобразить ее в строку:
DECLARE @myTime AS DATETIME;
SET @myTime = '1/1/2007';
SELECT @myTime;
Результат: 2007-01-01 00:00:00.000
Мы также можем преобразовать строку в дату с помощью CAST:
SELECT CAST('Jan 1 2007 12:00AM' as DATETIME)
Результат: 2007-01-01 00:00:00.000
Синтаксис для CONVERT выглядит так: CONVERT(new type, value, Style)
. Style является необязательным и может использоваться для форматирования вывода. Например, чтобы отобразить дату в общем стиле mm/dd/yy, мы можем использовать следующее:
DECLARE @myDate AS DATETIME;
SET @myDate = '1/1/2007';
SELECT CONVERT(varchar(50), @myDate, 1)
Результат: 01/01/07
Чтобы изменить отображение так, чтобы месяц был написан полностью, мы можем изменить стиль CONVERT с 1 на 7:
SELECT CONVERT(varchar(50), @myDate, 7)
Результат: Jan 01, 07
Тип данных DATETIME
Стандартный тип данных DATETIME был сохранен в SQL Server 2008. Он содержит как компонент даты, так и компонент времени. Компонент даты представлен числом дней от внутренней системной “базовой даты” 1 января 1900 года.
Тип данных DATETIME может содержать значения года от 1753 до 9999. Компонент времени точен до 3,33 миллисекунд. Если вам не нужны секунды и ваши годы находятся между 1900 и 2079, то можно использовать тип SMALLDATETIME. Он занимает в два раза меньше байтов, чем DATETIME, и секунды округляются до ближайшей минуты.
Тип данных DATETIME2
В SQL Server 2008 появился новый тип данных DATETIME2. Он похож на DATETIME, но позволяет достичь большей точности. Диапазон года может вместить значения от 1 января 1 года н.э. до 31 декабря 9999 года. Время может быть указано с точностью до семи десятичных знаков долей секунды. Синтаксис для объявления этого нового типа может быть просто DATETIME2 или DATETIME2(n), где (n) – это значение от 0 до 7, указывающее доли секунды.
Отдельные типы DATE и TIME
В SQL Server 2008 даты и времена могут храниться отдельно, а не вместе. Есть тип данных DATE и тип данных TIME. Тип TIME может указывать доли секунды, как тип DATETIME2.
Тип данных DATETIMEOFFSET
Значения, которым необходимо учитывать часовой пояс, теперь могут быть обработаны нативно в SQL Server 2008 с помощью типа данных DATETIMEOFFSET. Этот тип объединяет DATETIME2 с компонентом смещения.
Заключение
SQL Server 2008 представляет новые и удобные типы данных даты и времени, которые обеспечивают большую точность и гибкость. Понимание этих типов данных и способов их манипулирования с помощью функций CAST и CONVERT является необходимым для работы с датами и временем в SQL Server.
Спасибо за чтение!