SQL不允许将日期列转换为日期时间?

标签 sql sql-server date datetime

Select * 
from tableA 
inner join tableB on tableA.id = tableB.aid 
                  and cast(a.date AS DATETIME) = CAST('2015-08-24' AS DATETIME) 

tableA.date 中存储的值为“2015-08-24”,表示数据没有问题。

当我执行上面的语句时,我得到

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

我可以知道为什么不能将date列转换为datetime吗?

最佳答案

问题的根本原因是这样的:

  • 数据类型 DATE 的可接受值范围为 01-01-000112-31-9999
  • 数据类型 DATETIME 的可接受值范围为 01-01-175312-31-9999

因此,如果您碰巧有 1753 年之前的 DATE,或者空/NULL 值 - 这将超出 DATETIME 可以处理的范围。

您应该停止在 SQL Server 2008 及更高版本中使用DATETIME。请改用 DATETIME2(n)(其中 n 代表您需要的小数秒数)。

所以试试这个:

select * 
from tableA 
inner join tableB on tableA.id = tableB.aid 
                  and cast(a.date AS DATETIME2(3)) = CAST('2015-08-24' AS DATETIME2(3)) 

我确信这会很好地工作。

关于SQL不允许将日期列转换为日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32568170/

相关文章:

sql-server - 根据列类型声明变量类型

php - 显示单个日期,除非它们是连续日期

javascript - 将 2014 年 3 月 25 日的日期格式设置为数字

java - 将日期从 UTC 转换为 CET

mysql - 在 SQL 查询的 WHERE 子句中的 CASE 语句之间使用 AND

sql - 按记录组而不是按行分页

mysql - 如何在 SET 子查询中引用外表?

SQL 连接多个表以及多个参数

sql-server - SSRS 参数 - 来自查询的值(并行)

c# - 基于角色的身份验证