【问题标题】:How to compare datetime2 with datetime如何比较 datetime2 和 datetime
【发布时间】:2015-07-24 14:09:14
【问题描述】:
我需要将一个数据库的属性 datetime2 与另一个数据库的属性 datetime 进行比较,因为我找不到将 datetime 转换为 datetime2 的方法。
我测试这句话:
select CAST(FechaAlta AS datetime) from tutors
但返回此错误消息:
将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。
【问题讨论】:
标签:
sql-server
datetime
sql-server-2014
datetime2
【解决方案1】:
datetime2 数据类型的范围比 datetime 更广 - datetime2 可以保存介于 0001-01-01 和 9999-12-31 之间的任何日期,而 datetime 以 01/01/1753 开头(原因不明涉及到第四代切斯特菲尔德伯爵,现在太神秘了,无法进入)。
如果要将 datetime2 转换为 datetime,则必须处理超出范围的值,例如:
SELECT CASE WHEN FechaAlta < '1753-01-01' THEN NULL ELSE CAST(FechaAlta AS DateTime) END AS FechaAlta_As_DateTime FROM Tutors
【解决方案2】:
首先获取相同datetime格式的datetime2和datetime。假设他们都属于date datatype,而您正在处理Oracle
TO_DATE(TO_CHAR(DATETIME2,'YYYYMMDD HH24:MI:SS')) = TO_DATE(TO_CHAR(DATETIME,'YYYYMMDD HH24:MI:SS'))