【问题标题】:SQL to_date function with case query带有案例查询的 SQL to_date 函数
【发布时间】:2014-11-08 05:51:36
【问题描述】:

SQL Case能否显示操作,返回to_date函数的结果,作为else条件的结果?

select m.movie_title,c.copy_id,
case 
when r.RENT_RETURN_DATE IS NULL
then 'not returned'
else (to_date(r.RENT_RETURN_DATE,'dd-mon-yyyy') -  to_date(r.RENT_DUE_DATE,'dd-mon-yyyy'))
end AS  "Days Late"
from  copy c,movie m,member mem,rental r
where mem.member_no=r.member_no and c.copy_id = r.copy_id 
and c.movie_id=m.movie_id and mem.member_no=102 

// (to_date(r.RENT_RETURN_DATE,'dd-mon-yyyy') - to_date(r.RENT_DUE_DATE,'dd-mon-yyyy')) ----返回一个整数 //

当我执行上述查询时,会显示以下错误:

错误报告-

SQL 错误:ORA-00932:不一致的数据类型:预期的 CHAR 得到了 NUMBER 00932. 00000 - “不一致的数据类型:预期的 %s 得到了 %s”

【问题讨论】:

  • RENT_RETURN_DATE 是什么数据类型?如果那已经是DATE,那么应用to_date() 将date 转换为date 完全没用(实际上这是一个等待发生的错误)

标签: sql oracle date


【解决方案1】:

这里的问题是 CASE 语句中的两个分支返回不同的类型——when 返回一个字符串,而else 返回一个整数。要解决此问题,您可以将 else 大小写的返回值转换为字符串:

select m.movie_title,
       c.copy_id,
       case 
         when r.RENT_RETURN_DATE IS NULL then 'not returned'
         else TO_CHAR(to_date(r.RENT_RETURN_DATE, 'dd-mon-yyyy') -
                       to_date(r.RENT_DUE_DATE, 'dd-mon-yyyy'))
       end AS  "Days Late"
  from copy c,
       movie m,
       member mem,
       rental r
  where mem.member_no = r.member_no and
        c.copy_id = r.copy_id and
        c.movie_id = m.movie_id and
        mem.member_no = 102

分享和享受。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 2020-09-02
    • 2014-05-20
    • 2012-12-15
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多