我想获得"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
在where条件下使用DATEDIFF(DAY,cdvdate,updatedate)<>0
。它只比较日期。
只需将值转换为日期进行比较:
where convert(date, cdvdate) <> convert(date, updatedate)
如果其中一个已经是date
,那么显然不需要转换。
SQL Server擅长使用转换为date
的索引。虽然在这种情况下不能使用索引(因为要比较两列(,但在where
子句中避免使用datediff()
是一个好习惯,除非你真的需要它
您可以将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