我有一个查询,如下所示。但是,当我运行此查询时,我得到的行[date_effective]早于2014年2月14日。为什么?我的日期是1980年1月1日出现的。
SELECT *
FROM D_CORPACTIONS_MSCI
WHERE [date_effective] >= '14 February 2014'
AND [ca_status] = 'EXPECTED'
OR [ca_status] = 'CONFIRMED'
OR [ca_status] = 'UNDETERMINED'
ORDER BY [date_effective]
答案 0 :(得分:2)
SELECT *
FROM d_corpactions_msci
WHERE ( date_effective >= '14 February 2014' )
AND ( ca_status = 'EXPECTED'
OR ca_status = 'CONFIRMED'
OR ca_status = 'UNDETERMINED' )
ORDER BY date_effective
答案 1 :(得分:2)
您的and
和or
相互冲突。
因此匹配的行不正确。
尝试封装or
语句,或者在这种情况下,使用in
:
select *
from d_corpactions_msci
where date_effective >= '14 february 2014'
and ca_status in ('EXPECTED', 'CONFIRMED', 'UNDETERMINED')
order
by date_effective
此外,不要通过转换日期来依赖客户端或服务器上的日期格式:
where date_effective >= convert(datetime, '20140214', 112)
答案 2 :(得分:0)
Patrick Hofman和Kashif - 他们已经回答了你的问题。
您也可以使用UNION ALL
SELECT *
FROM D_CORPACTIONS_MSCI
WHERE ([date_effective] >= '14 February 2014')
AND [ca_status] = 'EXPECTED'
UNION ALL
SELECT *
FROM D_CORPACTIONS_MSCI
WHERE ([date_effective] >= '14 February 2014')
AND [ca_status] = 'CONFIRMED'
UNION ALL
SELECT *
FROM D_CORPACTIONS_MSCI
WHERE ([date_effective] >= '14 February 2014')
AND [ca_status] = 'UNDETERMINED')
ORDER BY [date_effective]
UNION ALL
的效果优于OR
。
比较 - “OR”与“UNION ALL”我的理解如下: