Результат "выберите целое число + дата и время + символ" и "выберите целое число + символ + время и дата" - PullRequest
1 голос
/ 10 ноября 2010

почему:

select 1 - '+' - CONVERT(datetime,'01/01/2010',101) 

... запрос возвращает результат, а:

select 1 - CONVERT(datetime,'01/01/2010',101) - '+' 

... выдает ошибку?

1 Ответ

4 голосов
/ 10 ноября 2010

Это из-за Приоритет типа данных

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

Примечание: Can also subtract a number, in days, from a date Ссылка: http://msdn.microsoft.com/en-us/library/ms189518.aspx

Дата и время имеют приоритет надvarchar и int имеют приоритет над varchar

В вашем примере

select (1 - '+') - CONVERT(datetime,'01/01/2010',101) 

Это успешно из-за 1 - '+' = 1, который можно вычесть из даты.

select 1 - CONVERT(datetime,'01/01/2010',101) - '+'  

Это не удается, потому что 1-anydate = дата, но когда вы пытаетесь вычесть '+', вы не можете конвертировать дату и время таким способом.

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