select y.ASSET_ID from ASSET_PRODUCT_REPAIRINF y
where months_between(sysdate,add_months(to_date(y.repair_sdate,'yyyy-mm-dd'),3))<1
字段y.repair_sdate在数据库中为字符型
如上代码,当我要把y.repair_sdate转化为date时,由于数据库中有些数据存在空值,所以编译的时候出错:“输入值对于日期长度不够长。 这段代码的本意是,我要将系统当前时间sysdate,减去,开始保修时间”y.repair_sdate“与保修期(假设为3)的和。
我要求出的是差值小于1的所有数据,也就是还差一个月就要过保修期的数据。
但是因为有些数据的开始保修时间y.repair_sdate为空,所以用上面的方面编译不能通过
我想请高手给我一些建议,谢谢!
where months_between(sysdate,add_months(to_date(y.repair_sdate,'yyyy-mm-dd'),3))<1
字段y.repair_sdate在数据库中为字符型
如上代码,当我要把y.repair_sdate转化为date时,由于数据库中有些数据存在空值,所以编译的时候出错:“输入值对于日期长度不够长。 这段代码的本意是,我要将系统当前时间sysdate,减去,开始保修时间”y.repair_sdate“与保修期(假设为3)的和。
我要求出的是差值小于1的所有数据,也就是还差一个月就要过保修期的数据。
但是因为有些数据的开始保修时间y.repair_sdate为空,所以用上面的方面编译不能通过
我想请高手给我一些建议,谢谢!
所以当我用to_date(nvl2(y.repair_sdate,y.repair_sdate,'1900-01-01')时,会弹出输入值对于日期长度不够长,
今天为了这个问题,我已经弄了一整天了,郁闷死了,寻求高手来帮助解决。
另外,二楼,你说的没错,但你忽略了 保修时间y.repair_sdate 在数据库中的字段是varchar(10)型。在转换为date型的时候,是无法用to_date转换的。
也就是说,只要数据库中存在一个空值,就会出错的。
select to_date(nvl(y.repair_sdate,'1900-01-01'),'yyyy-mm-dd') from ASSET_PRODUCT_REPAIRINF y
没有什么问题
而把select to_date(nvl(y.repair_sdate,'1900-01-01'),'yyyy-mm-dd') from ASSET_PRODUCT_REPAIRINF y
嵌入months_between,充当它的一个参数时,就显示错误了呢?
跪求高手帮助