我有一个表格式为(A1 CHAR,A2 NUMBER,A3 NUMBER)
BB,CC中存放的是日期,数据如下:
ff, 20071201,20071223
ff,20071203,20071201
ee, 20071101,20080101
ee, 20071209,20071201
gg, 20080103,20080207
现在要求根据字段A3-A2得的数进行判断若大于0则显示汇总数
select a1,count(a1) from
(select a1,to_date(to_char(a3),'yyyymmdd')-to_date(to_char(a2),'yyyymmdd') as a4 from table1)
where a4>0
group by a1这样写则提示 input value not long enough for date format这样的错误 ,那么日期相减的到的是什么类型的值,如何进行转换进行判断啊!
BB,CC中存放的是日期,数据如下:
ff, 20071201,20071223
ff,20071203,20071201
ee, 20071101,20080101
ee, 20071209,20071201
gg, 20080103,20080207
现在要求根据字段A3-A2得的数进行判断若大于0则显示汇总数
select a1,count(a1) from
(select a1,to_date(to_char(a3),'yyyymmdd')-to_date(to_char(a2),'yyyymmdd') as a4 from table1)
where a4>0
group by a1这样写则提示 input value not long enough for date format这样的错误 ,那么日期相减的到的是什么类型的值,如何进行转换进行判断啊!
select a1,count(a1) from
(select a1,to_number(to_char(a3,'yyyymmdd'))-to_number(to_char(a2,'yyyymmdd')) as a4 from table1)
where a4> 0
group by a1
你这样做是把他当成了日期型的.
不对啊!
比如20080101 -20071225 应该的太数为:7
而用直接减则得到8876,所以直接减不正确,转换为DATE后,再判断
这个是报日期格式转化错误吧!查找你的a3,a2的数据时间直接减出来的是数字,可以直接和数字比较的,会自动转型的
这个肯定会报错啊
input value not long enough for date format
to_date(to_char(a3),'yyyymmdd')这样是错的
这样才是对的
to_date(to_char(a3,'yyyymmdd'),'yyyymmdd)
这样去减的话肯定可以
a3,a2为number(8)类型
如果你的问题如你描述,不需要这么复杂,可以简单的直接相减,不需要转型,因为日期在后的肯定比日期在前的数值大select a1,count(*) from (
select a1,a3-a2 as a4 from table1)
where a4>0
group by a1
或者
select a1,count(case when a3>a2 then 1 else null end) as a4 from table1
group by a1
TIME1
----------
1
select to_date(20081010,'yyyymmdd')-to_date(20080101,'yyyymmdd') from dual;
to_date()函数没指明格式