如何将日期相同但时间不同的两个字段关联起来



我想获得"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 

相关内容

最新更新