MM / dd / yyyy datetime数据类型导致值超出范围

时间:2018-08-13 08:51:03

标签: sql date datetime

我要输入2个日期值以便从SQL查询中过滤掉。

 EXEC [Report].[usp_EmployeeReport_Detail] '01-01-2017','31-08-2019'

我输入的日期为MM/dd/yyyy,然后输入 WHERE子句包含

(j.StartDate BETWEEN @BegDate AND @EndDate)

执行查询时出现以下错误。

  

从nvarchar数据类型到datetime数据类型的转换导致值超出范围。

我也尝试使用以下方法转换日期时间结果。

SELECT CONVERT(datetime,01-31-2017,101)

这将返回1894-05-25 00:00:00.000作为响应。怎么可能?

3 个答案:

答案 0 :(得分:2)

尝试:您错过了日期中的报价:

SELECT CONVERT(datetime,'01-31-2017',101)

答案 1 :(得分:2)

正如@Damien_The_Unbeliever所说,01-31-2017使用数值表达式,其结果为-2047

-2047表示从2047减去1900-01-01天的日子,因此日期的结果将是1894-05-25 00:00:00.000

因此,您的查询SELECT CONVERT(datetime,01-31-2017,101)SELECT CONVERT(datetime,-2047,101)相同

sqlfiddle


您可以使用符合ANSI的格式YYYYMMDD

SELECT CONVERT(datetime,'20170131',101);

代替

DD-MM-YYYY 01-31-2017

或者只需添加'即可包含日期'01-31-2017',如回答@fa06

答案 2 :(得分:0)

尝试以下方式

android:launchMode = "singleInstance"

在您的情况下,您错过了引号作为显示的结果输出的类型