如何关联具有相同日期但不同时间的两个字段
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()
是一个好习惯,除非你真的需要它。在这种情况下,你真的不需要它。
我想获取日期差异为 "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()
是一个好习惯,除非你真的需要它。在这种情况下,你真的不需要它。