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

时间:2019-11-05 07:01:37

标签: sql sql-server-2008

我想获取日期为“ 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

3 个答案:

答案 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。在这种情况下,您实际上并不需要它。