sql convert игнорирует формат? - PullRequest
1 голос
/ 04 января 2012

работает:

SELECT CONVERT(VARCHAR(20), GETDATE(), 100)

приведет к:

Jan  4 2012  1:25PM

Я знал это годами.

Однако вчера, когда я ехал, я подумал про себя:

Эй! Я дал ему формат 103 для формата datetime,

Но я на самом деле не СКАЗАЛ новообращенному, что я передаю также дату и время объект! (например, getdate ()))

Итак, я попробовал:

SELECT CONVERT(VARCHAR(20), 'lalala', 100)

И результат был:

lalala

Итак, теперь я пытаюсь преобразовать 'lalala' в строку в формате datetime (103).

что (по логике) должно дать мне исключение.

но это не так.

Есть разумное объяснение?

Ответы [ 3 ]

1 голос
/ 04 января 2012

CONVERT учитывает как целевой тип, так и тип выражения, чтобы понять, следует ли учитывать третий аргумент. Если вы конвертируете дату и время в строку или наоборот, третий аргумент считается. В вашем примере строка преобразуется в строку, поэтому третий аргумент игнорируется.

Учтите это:

SELECT 1, CONVERT(datetime, '03/01/2011', 103)
SELECT 2, CONVERT(datetime, '03/01/2011', 101)
SELECT 3, CONVERT(varchar, '03/01/2011', 103)
SELECT 4, CONVERT(varchar, '03/01/2011', 101)

Вот результаты:

--- -----------------------
1   2011-01-03 00:00:00.000

--- -----------------------
2   2011-03-01 00:00:00.000

--- ------------------------------
3   03/01/2011

--- ------------------------------
4   03/01/2011

Как видите, последние два «преобразования» ничего не изменили, потому что и исходный, и целевой тип были varchar, хотя выражение выглядело как date / datetime.

Справка:

0 голосов
/ 04 января 2012

В документации MSDN для CONVERT говорится, что параметр стиля интерпретируется в зависимости от типа переданного значения, поэтому я предполагаю, что он проверяет значение и может сказать, какой это тип.* Например, обратите внимание, что стиль «1» означает «мм / дд / гг» для даты и времени «всегда 8 цифр. Всегда использовать в научной записи» для значений с плавающей запятой.

0 голосов
/ 04 января 2012

Функция преобразования использует третий параметр (style), только если второй (data_to_be_converted) равен datetime.

Если это уже varchar, это returns значение и ничего не делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...