问一下数据库这段代码的错误

所有的日期字段都为字符串

报错为expected char got number

从报错分析来看是类型不一样,也就是*100不是数字值,但是第二段代码却过了,这就很不理解了,如果真的类型不一样第二段*100也会报错才对



下面的这两处为什么会有冲突

select
case
  when sysdate < to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd')
  then '0.0'
  when cih2.time2<sysdate
  then '100'
  when
        cih2.time2-to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd')=0
  then '0.0'    --这里
  else (((to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd')-sysdate)+1)/(cih2.time2-to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd'))*100)    --这里,报错的地方这个100下面有下划线
end 项目总体进度  
from cbm_item_headers cih,
(select a.*,
(case
        when To_number(a.end_month, '99') < 12
        then to_date(a.end_year || '-' || to_char(cih2.end_month2,'99') || '-01', 'yyyy-MM-dd')
        else to_date(to_char(cih2.end_year2,'9999') || '-' || '01' || '-01', 'yyyy-MM-dd') end) time2
from cbm_item_headers a,
(select item_code,to_number(end_year, '9999') + 1 end_year2,to_number(end_month, '99')+1 end_month2 from cbm_item_headers) cih2 where a.item_code=cih2.item_code) cih2
where cih.item_code=cih2.item_code


我去掉这两处其中一处就可以运行

select
(((to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd')-sysdate)+1)/(cih2.time2-to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd'))*100)    --去掉了case就可以运行
from cbm_item_headers cih,(select a.*,
(case
        when To_number(a.end_month, '99') < 12
        then to_date(a.end_year || '-' || to_char(cih2.end_month2,'99') || '-01', 'yyyy-MM-dd')
        else to_date(to_char(cih2.end_year2,'9999') || '-' || '01' || '-01', 'yyyy-MM-dd') end) time2
from cbm_item_headers a,
(select item_code,to_number(end_year, '9999') + 1 end_year2,to_number(end_month, '99')+1 end_month2 from cbm_item_headers) cih2 where a.item_code=cih2.item_code) cih2
where cih.item_code=cih2.item_code

----------------------------------------------------------

select
case
  when sysdate < to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd')
  then '0.0'
  when cih2.time2<sysdate
  then '100'
  when
        cih2.time2-to_date(cih.begin_year || '-' || cih.begin_month || '-01', 'yyyy-MM-dd')=0
  then '0.0'        --去掉了else就可以运行
end 项目总体进度  
from cbm_item_headers cih,
(select a.*,
(case
        when To_number(a.end_month, '99') < 12
        then to_date(a.end_year || '-' || to_char(cih2.end_month2,'99') || '-01', 'yyyy-MM-dd')
        else to_date(to_char(cih2.end_year2,'9999') || '-' || '01' || '-01', 'yyyy-MM-dd') end) time2
from cbm_item_headers a,
(select item_code,to_number(end_year, '9999') + 1 end_year2,to_number(end_month, '99')+1 end_month2 from cbm_item_headers) cih2 where a.item_code=cih2.item_code) cih2
where cih.item_code=cih2.item_code


漫之旅
浏览 1049回答 1
1回答

NULL12345

case when 前几个结果都是字符串,else结果是数学
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Oracle