Правильный способ установки значения даты и времени для переменной в 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