我有一个表格式为(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这样的错误 ,那么日期相减的到的是什么类型的值,如何进行转换进行判断啊!

解决方案 »

  1.   

    日期相减后得到的是个什么类型的值,如何同NUMBER类型进行判断啊 !???
      

  2.   


    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 
      

  3.   

    a2,a3 本身就是NUMBER(8) 类型,只不过他里面记录的是日期比如:20071228\20080112等等
    你这样做是把他当成了日期型的.
    不对啊!
      

  4.   

    都是number,为什么不直接减?不用搞那么复杂
      

  5.   

    是数字型,可以和number类型直接进行算术运算的。
      

  6.   

    直接减得到的不是准确的天数!
    比如20080101 -20071225 应该的太数为:7
    而用直接减则得到8876,所以直接减不正确,转换为DATE后,再判断
      

  7.   

    input   value   not   long   enough   for   date   format这样的错误
    这个是报日期格式转化错误吧!查找你的a3,a2的数据时间直接减出来的是数字,可以直接和数字比较的,会自动转型的
      

  8.   

    select   a1,to_date(to_char(a3),'yyyymmdd')-to_date(to_char(a2),'yyyymmdd')   as   a4   from   table1
    这个肯定会报错啊
    input   value   not   long   enough   for   date   format
    to_date(to_char(a3),'yyyymmdd')这样是错的
    这样才是对的
    to_date(to_char(a3,'yyyymmdd'),'yyyymmdd)
    这样去减的话肯定可以
      

  9.   

    更不对!!
    a3,a2为number(8)类型
      

  10.   

    说了你的数据有问题,你可以用几条数据测试下你的sql
    如果你的问题如你描述,不需要这么复杂,可以简单的直接相减,不需要转型,因为日期在后的肯定比日期在前的数值大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
      

  11.   

    SQL> select (to_date('20090101')- to_date('20081231')) as time1 from dual;
     
         TIME1
    ----------
             1
      

  12.   

    你错就错在对oracle中日期默认格式的不了解
    select to_date(20081010,'yyyymmdd')-to_date(20080101,'yyyymmdd') from dual;
    to_date()函数没指明格式