oracle SQL过滤器-在多列过滤器中使用AND和OR运算符

daupos2t  于 12个月前  发布在  Oracle
关注(0)|答案(2)|浏览(107)

我需要提取业务=IT和日期>= 2021-07-01和日期<= 2022-09-10的数据
任何一个条件满足我需要拉修改器:G11、G7服务:物理手术

Technology modifier Date      service
IT.          95.    2021-07-01.  Phys
Cse.         G5.    2021-09-09.  Tec
Mech.        GT.    2022-08-07.  Tec
IT.          G11.   2022-09-06.  Tec
IT.          G7.    2022-08-07.  Oper
IT.          GR.    2022-06-26.  Tec

技术修改器日期服务IT。95. 2021年7月1日。Phy IT G11. 2022-09-06 Tec IT. G7,2022-08-07。Oper
下面是我尝试过的:
其中技术= 'IT' AND(日期在'2021-07-01'和'2022-09- 10'之间)OR(修改符IN('G11','G7'))OR(服务IN('phys','oper'))
这里的问题是,它也在拉动所有其他技术。我如何修改,以便它拉正确的信息。

toe95027

toe950271#

试试这个:

where
    technology = 'IT' and
    ("Date"  between '2021-07-01' and '2022-09-10') and
    (
        (modifier IN ('G11', 'G7')) or
        (service In ('phys', 'oper'))
    )
bnl4lu3b

bnl4lu3b2#

ANDOR具有更高的运算符优先级如果您希望OR被视为具有更高的运算符优先级,则将OR条件括在括号中:

WHERE  Technology= 'IT'
AND    "Date" BETWEEN DATE '2021-07-01' AND DATE '2022-09-10'
AND    (  Modifier IN ('G11', 'G7')
       OR Service  IN ('phys', 'oper')
       )
  • 注意:Date是保留字,不能用作无引号的标识符。如果你想使用它作为一个标识符(请不要,它的坏习惯),那么你将需要使用一个引用的标识符(和正确的情况)。
  • 注2:'2021-07-01'不是日期,它是一个字符串文字,碰巧看起来像一个日期。假设你的Date列的数据类型是DATE,那么Oracle会尝试将你的字符串隐式转换为DATE,但这依赖于NLS_DATE_FORMAT会话参数,任何用户都可以随时在自己的会话中更改该参数,所以你不应该依赖隐式转换。相反,使用DATE文字或显式使用TO_DATE函数,并使用格式模型来执行转换。

相关问题