在Oracle中执行选择查询时出现问题

17 浏览
0 Comments

在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

有人可以帮我解决这个问题吗?

任何建议都将非常有帮助。

0
0 Comments

在Oracle中使用SELECT查询时出现问题的原因可能是使用了不正确的语法。在这个例子中,问题出现在以下代码中:

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

问题可能是由于在逻辑上尝试比较'105'和TRANS_DT=CAST('09-JUL-2014' AS DATE)而导致的。在这种情况下,'105'被视为字符串,而TRANS_DT被视为日期。然而,LIKE操作符只能在数字和字符串之间进行一次比较。

为了解决这个问题,可以参考类似的错误解决方案。可以查看以下链接获取更多信息:

How can I use "OR" condition in MySQL CASE expression?

希望这个解决方案能帮助您解决在Oracle中使用SELECT查询时遇到的问题。

0
0 Comments

问题的原因是使用了错误的查询语法,将等号(=)错误地用于字符串匹配,导致查询无法成功执行。

解决方法是将等号(=)替换为LIKE关键字,以实现字符串匹配的功能。同时,确保在使用LIKE操作符时,查询条件中的字符串使用通配符(%)进行模糊匹配。使用LIKE操作符会导致对所有行进行全表扫描,从而增加了SQL语句执行的时间。以下是正确的查询语句示例:

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

通过以上修改,成功解决了在Oracle中使用SELECT查询时出现的问题。

0
0 Comments

问题出现的原因是TRANS_DT字段可能包含时间组件,导致与日期进行比较时出现问题。解决方法是使用trunc函数截断TRANS_DT字段的时间组件,并与日期进行比较,或者使用索引来优化查询。

以下是解决方法的具体代码:

如果TRANS_DT字段包含时间组件,可以使用trunc函数截断时间组件,并与日期进行比较:

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'

0