我想获取日期为“ DATE”(交易日期)与“已编码日期”(实际日期)的交易数据,
我尝试将两个字段与交易日期相关联,但是问题是另一个字段具有时间戳,这意味着我无法与没有时间戳的其他字段相关
select
cast( cdvdate AS varchar(12) ) as Transaction_Date,
cast( UpdateDate AS varchar(20) ) as Encoded_Date,
ApprovedDate
from
cdvhdr
where
cdvdate != updatedate
我希望结果没有这样的交易日期和编码日期
Transaction_Date Encoded_Date ApprovedDate
Jan 4 2016 Jan 23 2016 10:54AM 2016-01-24 16:16:37.000
但是由于时间戳记,它在同一天显示结果
Transaction_Date Encoded_Date ApprovedDate
Jan 26 2016 Jan 26 2016 10:58AM 2016-01-26 13:42:32.000
Jan 26 2016 Jan 26 2016 11:07AM 2016-01-26 13:42:55.000
Jan 26 2016 Jan 26 2016 11:09AM 2016-01-26 13:41:49.000
Jan 26 2016 Jan 26 2016 11:11AM 2016-01-26 13:42:09.000
答案 0 :(得分:1)
在where条件下使用DATEDIFF(DAY,cdvdate,updatedate)<>0
。它只会比较日期。
答案 1 :(得分:0)
您可以将datetime
投射到date
。
SELECT Cast(cdvdate AS VARCHAR(12)) AS Transaction_Date,
Cast(updatedate AS VARCHAR(20)) AS Encoded_Date,
approveddate
FROM cdvhdr
WHERE Datediff(dd, Cast(cdvdate AS DATE), Cast(updatedate AS DATE)) != 0
答案 2 :(得分:0)
只需将值转换为日期即可进行比较:
where convert(date, cdvdate) <> convert(date, updatedate)
如果其中之一已经是date
,则显然不需要进行转换。
SQL Server擅长使用索引转换为date
的方式。尽管在这种情况下不能使用索引(因为正在比较两列),但是除非您确实需要,否则最好避免在datediff()
子句中使用where
。在这种情况下,您实际上并不需要它。