Правильный способ установки значения даты и времени для переменной в SQL Server

Возможный дубликат:
лучший способ преобразования и проверки строки даты

При назначении значения datetime переменной datetime в SQL Server, какой формат лучше всего использовать для культурных агностических причин и почему?

Предполагаемая дата: 01-Dec-2013

DECLARE @myDate DATETIME
SET @myDate = '2013-12-01'
SET @myDate = '20131201'
SET @myDate = '12/01/2013'
SET @myDate = '2013-12-01T00:00:00.000'
SET @myDate = '2013-12-01T00:00:00'

Если @myDate имеет тип DATETIME2, будет ли ваш ответ другим?

Ответ 1

Основанный на стандарте ISO 8601, следующие 3 формата в вопросе действительны:

DECLARE @myDate DATETIME
SET @myDate = '20131201'
SET @myDate = '2013-12-01T00:00:00.000'
SET @myDate = '2013-12-01T00:00:00'

Преимущество использования формата ISO 8601 заключается в том, что оно является Международный стандарт. Кроме того, значения datetime, указанные в использование этого формата недвусмысленно. Кроме того, этот формат не влияет настройками SET DATEFORMAT или SET LANGUAGE.

Ответ 2

Это было рассмотрено до, например, лучший способ преобразования и проверки строки даты

Формат ISO-8601 - это YYYYMMDD только для дат, или YYYY-MM-DDTHH: mm: ss для дата со временем

Если вы не можете гарантировать формат ISO, вам следует заранее установить DATEFORMAT

Изменить

Re: Вы все еще использовали бы это для datetime2

Да, на самом деле это четко указано в MSDN здесь. Из-за дополнительной точности до 100ns формат ISO 8601 составляет YYYY-MM-DDTHH:mm:ss[.nnnnnnn]

Ответ 3

SET @myDate = '2013-12-01T00:00:00.000'

SET @myDate = '2013-12-01T00:00:00'

SET @myDate = '2013-12-01'

Это правильные форматы в соответствии с ISO 8601