nvl(month,0)不就可以了,或者用你的select add_months(start,to_number(nvl(month,'0'))) from table
不用那么麻烦,你写的类型转换有问题吧? 如下就可以with tab as ( select '2012-01-01' yearF, null monthS from dual union all select '2012-01-01' yearF, '2' monthS from dual) select add_months(yearF, nvl(monthS, '0')) from tab--结果 ------------------------------------------------------- 1 2012/01/01 2 2012/03/01
这样查询的结果还是null。只要month是null出来的结果也是。
oracle 会自动转换数字型字符串的select add_months(start,nvl(month,'0')) from table 怎么会错嘛
我知道你的是怎么回事了! 你的DB中存的是<NULL>,不是null 我以前做sqlserver的时候遇到过这个情况,这个算是函数的一个bug吧,需要手动判断下null 用下面的sql with tab as ( select '2012-01-01' yearF, null monthS from dual union all select '2012-01-01' yearF, '2' monthS from dual ) select (case when monthS is null then yearF else to_char(add_months(yearF, monthS), 'yyyy-MM-DD') end) from tab
如下就可以with tab as (
select '2012-01-01' yearF, null monthS from dual
union all
select '2012-01-01' yearF, '2' monthS from dual)
select add_months(yearF, nvl(monthS, '0')) from tab--结果
-------------------------------------------------------
1 2012/01/01
2 2012/03/01
我知道你的是怎么回事了!
你的DB中存的是<NULL>,不是null
我以前做sqlserver的时候遇到过这个情况,这个算是函数的一个bug吧,需要手动判断下null
用下面的sql
with tab as ( select '2012-01-01' yearF, null monthS from dual union all select '2012-01-01' yearF, '2' monthS from dual )
select
(case when monthS is null then yearF else to_char(add_months(yearF, monthS), 'yyyy-MM-DD') end) from tab