【问题标题】:Select Query in Oracle giving issue在 Oracle 中选择查询给出问题
【发布时间】:2014-07-11 06:12:39
【问题描述】:

查询:

select * from v_fi_trans_logs 
where case_num like '105'
AND TRANS_DT=CAST('09-JUL-2014' AS DATE);

不返回任何记录。

但是如果我选择为

select TRANS_DT,CAST('09-JUL-2014' AS DATE) from v_fi_trans_logs where case_num like '105'

它返回相等的值。

    TRANS_DT   CAST('09-JUL-2014' AS DATE) 
----------------------------------------------    
    09-JUL-14   09-JUL-14
    09-JUL-14   09-JUL-14
    09-JUL-14   09-JUL-14
    09-JUL-14   09-JUL-14
    09-JUL-14   09-JUL-14
    09-JUL-14   09-JUL-14
    09-JUL-14   09-JUL-14

谁能帮我解决一下这里的问题。

任何输入都会有很大帮助。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    我通过 HIT 和 TRAIL 方法找到了解决方案:

    它适用于:

    select * from v_fi_trans_logs 
    where case_num like '105'
    AND TRANS_DT LIKE CAST('09-JUL-2014' AS DATE);
    

    也就是说,将 "=" 替换为 "LIKE" 即可解决问题。

    【讨论】:

    • 如果您使用like 操作员,请确保您有类似like '105%' 的内容。当然,当您使用like 运算符时,它会对所有行进行全表扫描,这会导致执行sql 语句的时间更长。
    【解决方案2】:

    我认为问题在于您正在使用:

    like '105' AND TRANS_DT=CAST('09-JUL-2014' AS DATE);
    

    您可以将 like 用作数字和字符串的比较……只能使用一次。

    但是,如果您尝试在逻辑上比较“105” AND TRANS_DT=CAST('09-JUL-2014' AS DATE)。你做不到。例如,翻译将是 ( 7 & true )。

    查看此解决方案,错误非常相似。 How can I use "OR" condition in MySQL CASE expression?

    【讨论】:

      【解决方案3】:

      你确定 TRANS_DT 被截断了吗? 如果它具有时间组件,则与日期相比将不起作用。

      尝试以下方法:

      select * 
        from v_fi_trans_logs 
       where case_num like '105'
         and trunc(trans_dt) = date '2014-07-09';
      

      或者,如果您在 trans_dt 上有一个要使用的索引:

      where case_num like '105'
        and trans_dt >= date '2014-07-09'
        and trans_dt <  date '2014-07-10'
      

      【讨论】:

        猜你喜欢
        • 2021-03-21
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多