не удалось получить запись для строки в качестве переменной типа даты в SQL 2005 - PullRequest
0 голосов
/ 06 мая 2011

Моя проблема: если я запускаю это, он возвращает результат

declare @dummy DATETIME
set @dummy ='10-20-2008'

SELECT * FROM associate WHERE dateofbirth = @dummy

Но если я удаляю кавычки из фиктивного значения var, он возвращает ноль.

declare @dummy DATETIME
set @dummy =10-20-2008

SELECT * FROM associate WHERE dateofbirth = @dummy

Ответы [ 4 ]

1 голос
/ 06 мая 2011

Без кавычек означает, что выражение bigint. В вашем втором примере @ dummy = 10-20-2018 = -2018.Это означает, что ваша дата будет на 2018 дней раньше, чем 01-01-1900 (23-06-1894).Если вы выполните запрос:

select DATEDIFF(DAY,'01-01-1900',@dummy)

Вы получите -2018

0 голосов
/ 09 мая 2011

** ИСПОЛЬЗУЙТЕ ЭТО **

Преобразование обеих сопоставлений в VARCHAR, а затем сравнить его

convert (vrachar (12), @ dummy, 101) = convert (varchar (12), '04/10/2008', 101)

0 голосов
/ 06 мая 2011

Для SQL Server 2005 при использовании только дат единственная безопасная строка даты и времени - ггггммдд И они тоже должны быть заключены в одинарные кавычки

Так что вы должны использовать set @dummy ='20081020'

Пример:

set language british
declare @dummy DATETIME
set @dummy ='10-20-2008' --fail
0 голосов
/ 06 мая 2011

Это работает как задумано. Вам нужно заключить дату в кавычки, если вы собираетесь так ее записать. Вы также можете построить дату, используя одну из функций SQL.

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