尝试查找不同的数据时返回相同的结果 [英] Get back the same result when trying to find different data
本文介绍了尝试查找不同的数据时返回相同的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我可以从以下查询中获取每年的 15/02
- 21/06
日期范围数据
SELECT * FROM dim_date
WHERE EXTRACT(MONTH FROM date_cal)BETWEEN 3 AND 5
OR EXTRACT(MONTH FROM date_cal)= 2 AND EXTRACT(DAY FROM date_cal)> = 15)
OR(EXTRACT(MONTH FROM date_cal)= 6 AND EXTRACT(DAY FROM date_cal)<= 21)
但问题是,当我想从年度找到 2010 - 2012
,我得到相同的结果。
我想获得的范围:
2010-02-15 - 2010-06-15
2011-02-15 - 2011-06-15
2012-02-15 - 2012-06-15
SELECT * FROM dim_date
WHERE EXTRACT(MONTH FROM date_cal)BETWEEN 3 AND 5
OR(EXTRACT(MONTH FROM date_cal)= 2 AND EXTRACT(DAY FROM date_cal)> = 15 )
OR(EXTRACT(MONTH FROM date_cal)= 6 AND EXTRACT(DAY FROM date_cal)<= 21)
AND EXTRACT(YEAR FROM date_cal)BETWEEN 2010 AND 2012
谁能帮我解决这个问题?
解决方案您的问题是缺少括号:在SQL
AND
优先于或
,因此您需要SELECT * FROM dim_date
WHERE(添加括号
EXTRACT (MONTH FROM date_cal)BETWEEN 3 AND 5
OR(EXTRACT(MONTH FROM date_cal)= 2 AND EXTRACT(DAY FROM date_cal)> = 15)
OR(EXTRACT(MONTH FROM date_cal)= 6 AND EXTRACT(DAY FROM date_cal)<= 21)
) - 添加括号
和在2010和2012之间提取(年份从date_cal)
没有括号,您会得到
A或B或(C和D)
,但您要(A或B或C)和D
I can get the
15/02
-21/06
date range data on every year from the query below.SELECT * FROM dim_date WHERE EXTRACT (MONTH FROM date_cal) BETWEEN 3 AND 5 OR (EXTRACT (MONTH FROM date_cal) = 2 AND EXTRACT (DAY FROM date_cal) >= 15) OR (EXTRACT (MONTH FROM date_cal) = 6 AND EXTRACT (DAY FROM date_cal) <= 21)
But the problem is, when i want to find from year
2010 - 2012
, I get back the same result.Range that i want to get:
2010-02-15 - 2010-06-15 2011-02-15 - 2011-06-15 2012-02-15 - 2012-06-15 SELECT * FROM dim_date WHERE EXTRACT (MONTH FROM date_cal) BETWEEN 3 AND 5 OR (EXTRACT (MONTH FROM date_cal) = 2 AND EXTRACT (DAY FROM date_cal) >= 15) OR (EXTRACT (MONTH FROM date_cal) = 6 AND EXTRACT (DAY FROM date_cal) <= 21) AND EXTRACT (YEAR FROM date_cal) BETWEEN 2010 AND 2012
Who can help me about this!
解决方案Your problem is a lack of brackets: In SQL
AND
takes precedence overOR
, so you need to put brackets around your whole previous expression:SELECT * FROM dim_date WHERE ( -- added bracket EXTRACT (MONTH FROM date_cal) BETWEEN 3 AND 5 OR (EXTRACT (MONTH FROM date_cal) = 2 AND EXTRACT (DAY FROM date_cal) >= 15) OR (EXTRACT (MONTH FROM date_cal) = 6 AND EXTRACT (DAY FROM date_cal) <= 21) ) -- added bracket AND EXTRACT (YEAR FROM date_cal) BETWEEN 2010 AND 2012
Without the brackets, you get
A or B or (C and D)
, but you want(A or B or C) and D
这篇关于尝试查找不同的数据时返回相同的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文