Независимый формат для строкового представления значения даты / времени, для сервера MS SQL? - PullRequest
4 голосов
/ 28 апреля 2011

У меня есть вопрос о неявном преобразовании строки в дату в MS SQL Server.

В частности, могу ли я быть уверен, что строка в 'гггг-мм-дд чч: мм: сс' (например'2011-04-28 13:01:45') формат, вставленный в столбец datetime, всегда будет автоматически преобразован в тип datetime, независимо от того, какие региональные или языковые настройки используются на сервере?

Если нет, существует ли такой независимый формат строки для даты и времени?

Зависит ли это от версии сервера MSSQL и как?

Заранее спасибо

1 Ответ

6 голосов
/ 28 апреля 2011

номер

Если вы используете столбец datetime (в отличие от более новых типов, введенных в 2008 году), безопасный формат включает букву T между компонентами даты и времени, например, '2011-04-28T13:01:45'.

Для неоднозначной даты (где день <= 12) SQL Server может перепутать день и месяц: </p>

set language british
select MONTH(CONVERT(datetime,'2011-04-05 13:01:45'))

----
5

set language british
select MONTH(CONVERT(datetime,'2011-04-05T13:01:45'))

----
4

В более общем смысле, однако, вы должны найти способ избежать обработки значений даты и времени как строк, например. если вы передаете это значение из какого-либо другого (не SQL) кода, то используйте все доступные средства в вашей библиотеке доступа к данным (например, ADO.Net), чтобы передать значение как значение даты и времени - пусть библиотека работает с любым необходимые переводы.

...