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

我想获取日期为“ 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
yzp0754 回答:如何关联两个具有相同日期但不同时间的字段

在where条件下使用DATEDIFF(DAY,cdvdate,updatedate)<>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 
,

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

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

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

SQL Server擅长使用索引转换为date的方式。尽管在这种情况下不能使用索引(因为正在比较两列),但是除非您确实需要,否则最好避免在datediff()子句中使用where。在这种情况下,您实际上并不需要它。

本文链接:https://www.f2er.com/3161693.html

大家都在问