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