怎样在SQL中把sysdate转换成字符串并加一个不重复的数,例如201102160001,201002160002...最后四位是不重复的数?

解决方案 »

  1.   

    1.创建SEQUENCE:my_SEQUENCE 
     如果只需要4位的话,SEQUENCE得最大值定为99992.Select To_char(sysdate, 'YYYYMMDD') || 
    (SELECT my_SEQUENCE.currval FROM DUAL
    )
    FROM DUAL
      

  2.   

    select to_char(sysdate,'yyyymmdd')||substr(myseq.nextval,1,4) from dual
      

  3.   

      还得用 Lpad填充到4位数 lpad('2', 4 , '0') 表示 : 0002
      

  4.   

    scott@SZTYORA> create sequence t_seq;序列已创建。scott@SZTYORA> select to_char(sysdate,'yyyymmdd')||lpad(t_seq.nextval,4,'0') from dual;TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(T_SEQ.NEXTVAL,
    ------------------------------------------------
    201102160001
      

  5.   

    scott@SZTYORA> create sequence t_seq;序列已创建。scott@SZTYORA> select to_char(sysdate,'yyyymmdd')||lpad(t_seq.nextval,4,'0') from dual;TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(T_SEQ.NEXTVAL,
    ------------------------------------------------
    201102160001scott@SZTYORA> select to_char(sysdate,'yyyymmdd')||lpad(t_seq.nextval,4,'0') from dual;TO_CHAR(SYSDATE,'YYYYMMDD')||LPAD(T_SEQ.NEXTVAL,
    ------------------------------------------------
    201102160002
      

  6.   

    我是在oracle里面试,再转到informatica里面开发,楼上各位的方法都行,只是我需要到informatica按照informatica提供的函数转换,两者是有区别的。不过谢谢各位。
      

  7.   

    with temp as(
    select level lv from dual connect by level < 10000
    )
    select to_char(sysdate,'yyyymmdd')||case when length(lv) < 5 then LPAD(lv,4,'0') end case from temp