Запрос функции преобразования SQL Server - PullRequest
1 голос
/ 14 сентября 2011

Я использовал функцию преобразования в одном из моих запросов

Select * from tblMas where FromDate >= CONVERT(varchar(10), @FromDate,112)

@FromDate - это параметр Datetime, я не знаю почему, но этот запрос работает нормально.

Хотя это не должно быть, поскольку FromDate имеет поле DateTime, и мы сравниваем его с полем Varchar.

CONVERT(varchar(10), @FromDate, 112) возвращает результат в формате yyyyMMdd.Я потерял, как SQL Server сравнивает это и возвращает правильный результат.

1 Ответ

3 голосов
/ 14 сентября 2011

Перед сравнением произойдет неявное преобразование типов из varchar в datetime.

Если вы посмотрите на план запроса, то увидите что-то вроде этого.

<ScalarOperator ScalarString="[FromDate]&gt;=CONVERT_IMPLICIT(datetime,CONVERT(varchar(10),[@FromDate],112),0)">

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

select * 
from tblMas 
where FromDate >= dateadd(day, datediff(day, 0, @FromDate), 0)

В SQL Server 2008 вы можете использовать

select * 
from tblMas 
where FromDate >= cast(@FromDate as date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...