Подтвердить что ты не робот

TSQL DATETIME ISO 8601

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

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

Ответ 1

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

Для ввода данных INSERT в таблицу 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

Ответ 2

Это

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

произведет это

2009-05-01T14:18:12.430

И более подробную информацию об этом можно найти на MSDN.

Ответ 3

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

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

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

2016-02-18T21:34:14Z

Ответ 4

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

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

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

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

Ответ 5

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

В целом, если вы специально фильтруете только значения Дата или хотите сохранить дату в нейтральном режиме. Корпорация Майкрософт рекомендует использовать формат нейтрального языка ymd или y-m-d. Каковы оба действительных формата ISO.

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

Из-за этого ваша самая безопасная ставка заключается в сохранении/фильтрации на основе формата всегда netural ymd.

Код:

select convert(char(10), getdate(), 126) -- ISO YYYY-MM-DD
select convert(char(8), getdate(), 112) -- ISO YYYYMMDD (safest)