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

Sui*_*eep 7 sql sql-server datetime date

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

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

当我执行上述声明时,我明白了

将日期数据类型转换为日期时间数据类型会导致超出范围的值

我可以知道为什么不能投了一个date专栏datetime吗?

mar*_*c_s 13

问题的根本原因是:

  • 数据类型DATE具有介于接受的值的01-01-000112-31-9999
  • 数据类型DATETIME具有介于接受的值的01-01-175312-31-9999

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

您应该停止使用 DATETIME In SQL Server 2008及更高版本.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)) 
Run Code Online (Sandbox Code Playgroud)

而且我相信这样做会很好.