Ошибка при попытке выполнить оператор SQL между двумя датами - PullRequest
0 голосов
/ 23 января 2012

SQL:

dim sql
sSql = "SELECT * FROM [dbo].[table] WHERE [sent] = 1 and datesent between '" & dStartDate & "' and '"  & dFinishDate & "'"
response.write(sSql)
set oRs = oConn.execute(sSql)       

Когда я выполняю этот SQL в SQL Server 2008, он работает нормально.Однако, когда я выполняю его в моем приложении, я получаю сообщение об ошибке:

Microsoft OLE DB Provider for SQL Server error '80040e07'

The conversion of a char data type to a datetime data type resulted
in an out-of-range datetime value.

Есть ли что-то другое, что я должен сделать в приложении?спасибо

Ответы [ 4 ]

5 голосов
/ 23 января 2012

Вы пробовали использовать даты в формате ISO?

SELECT * FROM [dbo].[Table]  
WHERE [sent] = 1 and datesent between '20120101' and '20120127' 

(Строго говоря, дата ISO 8601 для сервера sql - yyyy-mm-ddThh:mm:ss[.mmm])

Примечание: всегда используйте даты в формате ISO при выводе в текст (или с литералами); таким образом, они могут быть однозначно прочитаны во всех системах).

Даты формата SQL Server ISO 8601

http://msdn.microsoft.com/en-us/library/ms190977(v=sql.90).aspx

1 голос
/ 23 января 2012
SELECT * 
FROM [dbo].[Table] 
WHERE 
    [sent] = 1 
and datesent between CONVERT(datetime, '01/01/2012', 101) and CONVERT(datetime, '01/27/2012', 101)

ИЛИ

Ваш столбец datesent не DATETIME тип данных

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

Вы всегда должны использовать ISO-форматы «ГГГГММДД» для дат, поскольку SQL Server всегда будет правильно их анализировать, независимо от настроек локализации.

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

Проверьте настройки даты и времени.

set dateformat mdy
select CAST('01/27/2012' as datetime)
set dateformat dmy
select CAST('01/27/2012' as datetime) --> Exception

Вы можете отобразить текущую настройку с помощью:

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