选择Oracle中的查询提出问题

时间:2014-07-10 10:01:20

标签: sql oracle

查询:

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

任何人都可以帮我解决这个问题。

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

3 个答案:

答案 0 :(得分:0)

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

它适用于:

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

即将“=”替换为“LIKE”解决问题。

答案 1 :(得分:0)

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

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

你可以使用like作为数字和字符串的比较......只有一次。

但是如果你想在逻辑上比较'105'和TRANS_DT = CAST('09 -JUL-2014'AS DATE)。你做不了。例如,翻译将是(7& true)。

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

答案 2 :(得分:0)

您确定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'