Существует много строковых форматов, поддерживаемых SQL Server - см. MSDN Books Online on CAST and CONVERT. Большинство из этих форматов зависят от, какие у вас настройки языка/даты, поэтому эти настройки могут работать несколько раз, а иногда и нет.
Путь решения этой проблемы заключается в использовании (слегка адаптированный) ISO-8601 формат даты, который поддерживается SQL Server - это формат работы всегда - независимо от ваших языковых настроек и DateFormat SQL Server.
ISO-8601 format поддерживается SQL Server поставляется в двух вариантах:
YYYYMMDD
для всего датирует (без временной части); примечание здесь: нет тире!, это очень важно! YYYY-MM-DD
is NOT независимо от настроек даты и времени на вашем SQL Server и будет NOT работать во всех ситуациях!
или:
YYYY-MM-DDTHH:MM:SS
для даты и времени - здесь отметить: этот формат имеет дефис (но они могут быть опущены), и фиксированный T
в качестве разделителя между датой и временем часть вашего DATETIME
.
Это действительное для SQL Server 2000 и новее.
Если вы используете SQL Server 2008 или более поздней версии и DATE
тип данных (только DATE
- неDATETIME
), то вы действительно можете также использовать формат YYYY-MM-DD
и что будет работать тоже с любыми настройками в вашем SQL Server ,
Не спрашивайте меня, почему эта целая тема настолько сложна и несколько запутанна - так оно и есть. Но с форматом YYYYMMDD
вы должны быть в порядке для любой версии SQL Server и для любого языка и параметра dateformat на вашем SQL Server.
рекомендация для SQL Server 2008 и новее заключается в использовании DATE
, если вам нужна только часть даты, и DATETIME2(n)
, когда вам нужно как дата и время. Вы должны попытаться начать поэтапный отказ от типа данных DATETIME
, если это возможно.