0

我正在做一些数据侦察,想看看两个日期字段中的数据是否匹配。每列来自不同的表,因此我想检查它们是否相同。由于它们来自不同的表,并且我们没有 datesync 功能,因此两个字段都关闭了几微秒,也许在这里和那里一秒钟。我不在乎时间,我只在乎这两个字段是否反映相同的日期,因此在我的 where 子句中我将它们转换为日期......但是,这似乎不起作用,因为我仍然获取所有 281 条记录,有或没有

and cast(write_off_date as date) <> cast(write_off_action_date as date)

我的查询:

select status
    ,write_off_date
    ,write_off_action_date
 from renamed
 where write_off_date is not null or write_off_action_date is not null
    and cast(write_off_date as date) <> cast(write_off_action_date as date)

数据输出的样本是: 在此处输入图像描述

4

1 回答 1

3

OR条件放在括号中:

where (write_off_date is not null or write_off_action_date is not null)
    and cast(write_off_date as date) <> cast(write_off_action_date as date)

基本原理 - 您的代码如下:

condition1 or condition2 and condition3

and具有比 更高的逻辑优先级or,因此这相当于:

condition1 or (condition2 and condition3)

...这不是你想要的。

也就是说,整个where条款没有什么意义。如果任一日期为null,则无论如何都不能满足不等式条件,因此not null条件是不必要的。

于 2020-11-19T00:01:02.127 回答