Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于给定的日期范围从SQL中提取数据引发转换错误_Sql Server - Fatal编程技术网

Sql server 基于给定的日期范围从SQL中提取数据引发转换错误

Sql server 基于给定的日期范围从SQL中提取数据引发转换错误,sql-server,Sql Server,在我的应用程序中,我试图从数据库中获取数据,在给定的日期范围内获取记录中的数据 下面给出的是我用来获取数据的查询,以及我从SQL server获得的错误 质疑 错误 将varchar数据类型转换为datetime数据类型导致值超出范围 表中的数值如下所示: 列的数据类型为varchar。 我尝试了许多解决方案,但找不到任何相关的答案。如果有人能帮我解决这个问题,请告诉我 提前谢谢 您的问题似乎是您的SQL Server正在使用美国日期m/d/y。您应该使用标准格式yyyy-mm-dd,该格式应始

在我的应用程序中,我试图从数据库中获取数据,在给定的日期范围内获取记录中的数据

下面给出的是我用来获取数据的查询,以及我从SQL server获得的错误

质疑

错误

将varchar数据类型转换为datetime数据类型导致值超出范围

表中的数值如下所示:

列的数据类型为varchar。 我尝试了许多解决方案,但找不到任何相关的答案。如果有人能帮我解决这个问题,请告诉我


提前谢谢

您的问题似乎是您的SQL Server正在使用美国日期m/d/y。您应该使用标准格式yyyy-mm-dd,该格式应始终有效

因此,对于您的查询,请尝试:

select * 
from table_name 
where CAST(RequestCreatedOn as DateTime) BETWEEN '2015-08-31 12:00:00.000' AND '2015-09-15 12:00:00.000'

您还应该使用最合适的数据类型,以便将表中的数据类型更改为datetime。

在比较之前尝试使用转换:

    SELECT 
        * 
    FROM table_name 
    WHERE RequestCreatedOn BETWEEN CONVERT(DATETIME, '31-08-2015 12:00:00.000',105) 
      AND CONVERT(DATETIME, '15-09-2015 12:00:00.000',105) 

当您将日期存储为NVARCHAR时,没有什么特别的。转换为DATETIME并使用正确的DATEFORMAT。您的转换尝试将31-08转换为31月08日-这会导致错误当传递日期时始终使用YY-MM-dd格式-它会消除格式之间的任何歧义。另外,将日期存储在日期字段中,而不是varchar字段中。@您需要立即进入数据库,将数据类型从varchar更改为DATETIME
    SELECT 
        * 
    FROM table_name 
    WHERE RequestCreatedOn BETWEEN CONVERT(DATETIME, '31-08-2015 12:00:00.000',105) 
      AND CONVERT(DATETIME, '15-09-2015 12:00:00.000',105)