尝试查找不同的数据时返回相同的结果 [英] Get back the same result when trying to find different data

查看:105
本文介绍了尝试查找不同的数据时返回相同的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以从以下查询中获取每年的 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 over OR, 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆