如何关联具有相同日期但不同时间的两个字段

how to relate two fields with same date but different time

我想获取日期差异为 "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

您可以将 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 

在where条件中使用DATEDIFF(DAY,cdvdate,updatedate)<>0。它只会比较日期。

只需将值转换为日期进行比较:

where convert(date, cdvdate) <> convert(date, updatedate)

如果其中之一已经是date,显然不需要转换。

SQL 服务器擅长使用索引转换为 date。虽然在这种情况下不能使用索引(因为正在比较两列),但是避免在 where 子句中使用 datediff() 是一个好习惯,除非你真的需要它。在这种情况下,你真的不需要它。