TSQL DATETIME ISO 8601 - PullRequest
       22

TSQL DATETIME ISO 8601

51 голосов
/ 02 мая 2009

Мне дали спецификацию, которая требует формат даты ISO 8601, кто-нибудь знает коды конвертации или способ получить эти 2 примера:

ISO 8601 Extended Date 2000-01-14T13:42Z 
ISO 8601 Basic Date 20090123T105321Z

Ответы [ 5 ]

81 голосов
/ 02 мая 2009

При работе с датами в SQL Server формат ISO-8601, вероятно, является наилучшим способом, поскольку он просто работает независимо от настроек языка и культуры.

Чтобы вставить данные в таблицу SQL Server, вам не нужны никакие коды преобразования или что-либо вообще - просто укажите свои даты в виде буквенных строк

INSERT INTO MyTable(DateColumn) VALUES('20090430 12:34:56.790')

и все готово.

Если вам нужно преобразовать столбец даты в формат ISO-8601 в SELECT, вы можете использовать код преобразования 126 или 127 (с информацией о часовом поясе) для достижения формата ISO.

SELECT CONVERT(VARCHAR(33), DateColumn, 126) FROM MyTable

должно дать вам:

2009-04-30T12:34:56.790
20 голосов
/ 02 мая 2009

Это

SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)

будет производить это

2009-05-01T14:18:12.430

И некоторые подробности об этом можно найти на MSDN .

11 голосов
/ 19 февраля 2016

Если вам просто нужно вывести дату в формате ISO8601, включая завершающий Z, и вы используете хотя бы SQL Server 2012, тогда вы можете использовать FORMAT:

SELECT FORMAT(GetUtcDate(),'yyyy-MM-ddTHH:mm:ssZ')

Это даст вам что-то вроде:

2016-02-18T21:34:14Z

6 голосов
/ 16 апреля 2012

Черт возьми, НЕТ !!! Вы просите обидеть мир, если сохраняете отформатированные даты в SQL Server. Всегда сохраняйте даты и время, а также один из типов данных «дата / время» SQL Server (DATETIME, DATE, TIME, DATETIME2 и т. Д.). Позвольте внешнему коду разрешить метод отображения и хранить только отформатированные даты, когда вы создаете промежуточную таблицу для создания файла. Если вам абсолютно необходимо отображать форматы даты / времени ISO из SQL Server, делайте это только во время отображения. Я не могу подчеркнуть достаточно ... НЕ храните отформатированные даты / время в SQL Server.

{Edit}. Причин для этого много, но наиболее очевидным является то, что даже при хорошем формате ISO (который можно сортировать) все вычисления и поиск будущих дат (например, поиск всех строк в данном месяце) потребуют, по крайней мере, неявного преобразование (которое занимает дополнительное время), и если сохраненная отформатированная дата не соответствует формату, который вам нужен в настоящее время, сначала необходимо преобразовать ее в дату, а затем в нужный формат.

То же самое относится и к коду переднего плана. Если вы сохраняете отформатированную дату (которая является текстовой), для отображения локального формата даты, определенного в Windows или приложении, требуются те же движения.

Я рекомендую всегда сохранять дату / время как DATETIME или другой временной тип данных и форматировать только дату во время отображения.

0 голосов
/ 21 марта 2017

Технически у вас есть два варианта, если говорить о датах ISO.

Как правило, если вы выполняете фильтрацию только по значениям Дата или ИЛИ сохраняете дату нейтральным образом. Microsoft рекомендует использовать не зависящий от языка формат ymd или y-m-d. Оба являются допустимыми форматами ISO.

Обратите внимание, что форма '2007-02-12' считается не зависящей от языка для типов данных DATE, DATETIME2 и DATETIMEOFFSET.

В связи с этим ваша самая безопасная ставка - сохранить / отфильтровать на основе всегда натурального ymd формата.

код:

select convert(char(10), getdate(), 126) -- ISO YYYY-MM-DD
select convert(char(8), getdate(), 112) -- ISO YYYYMMDD (safest)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...