在ORACLE里面怎么将一个字符串转换成日期格式啊
比如将字符串‘2006-11-3’转换成日期2006-11-3
我在ORACLE存储过程中传进来一个参数startdate
内容是字符串2006-11-3
我用TO_DATE(StartDate,'YYYY-MM-DD')将其转换为日期格式
奇怪的是结果为:3-11月-06
怎么样才能把它转换成日期2006-11-3啊

解决方案 »

  1.   

    select to_char(sysdate,'yyyy-mm-dd') from dual;
    TO_CHAR(SYSDATE,'YYYY-MM-DD')
    -----------------------------
    2006-12-18
      

  2.   

    是你数据库的日期格式有问题吧!?
    我这边执行很正常啊select TO_DATE('2006-12-18','YYYY-MM-DD') from dual;
    ---------------------------
    2006-12-18
      

  3.   

    是的当前SESSION的NLS_DATE_FORMAT参数的设置引起的
    for example :
    [email protected]>alter session set nls_date_format = 'yyyy/mm/dd hh24:mi:ss'
      2  /会话已更改。[email protected]>select sysdate from dual;SYSDATE
    -------------------
    2006/12/19 09:38:[email protected]>alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';会话已更改。[email protected]>select sysdate from dual;SYSDATE
    -------------------
    2006-12-19 09:38:37
      

  4.   

    你进来的参数是日期型的吧,date再to_date肯定不对
      

  5.   

    我传进去的2006-11-3是字符串型的在 command window 里面
    select TO_DATE('2006-11-3','YYYY-MM-DD') from dual;
    运行后的结果为2006-11-3就是放到存储过程里就不行了。请问如何修改session啊,说具体点好吗?谢谢!
      

  6.   

    command window 里面
    SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';Session alteredSQL> SELECT SYSDATE FROM DUAL;SYSDATE
    -----------
    2006-12-19
      

  7.   

    在command window里面,我进行如下操作:
    SQL> alter session set nls_date_format = 'yyyy-mm-dd';Session alteredSQL> select TO_DATE('2000-5-5','YYYY-MM-DD') from dual;TO_DATE('2000-5-5','YYYY-MM-DD
    ------------------------------
    2000-5-5这说明是正常的吧但是我执行存储过程时:
    SQL> exec REPORT_DY_YWTOTAL(0,'2006-11-3');begin REPORT_DY_YWTOTAL(0,'2006-11-3'); end;ORA-01722: 无效数字
    ORA-06512: 在"CMAM.REPORT_DY_YWTOTAL", line 60
    ORA-06512: 在line 1问题就是,我在跟踪测试时:
    to_date('2006-11-3','yyyy-mm')
    的值是:03-11月-06在其他的地方都是好的
    就是在存储过程中就不行
    真是出鬼了
      

  8.   

    报的错误是无效数字.显然,这个错误是lz把非数值型的量用来做+ - * /了。
    lz自己看一下,是不是有串连接等方面的错误.或者,出错地方的上下几句代码都贴出来。
      

  9.   

    to :zhubidong() 
    1.你的存储过程中的两个参数是什么类型的?
    2.具体的报错位置是在过程的哪边 能贴出来 吗
      

  10.   

    我的存储过程是这样的:
    create or replace procedure REPORT_DY_YWTOTAL
    (DayOrMonth in number,
     StartDate in varchar2
    )我开始是这样串联的:sqladd_date := 'and EFFDATE = ' || TO_DATE(StartDate,'YYYY-MM-DD');sqladd_date 是作为SQL语句的一个补充部分
    EFFDATE     是数据库里面的一个日期型字段,其中里面有一个值是2006-11-3
    我现在是要查出这个日期的数据我开始也以为是串联有问题,我就改成了这样:
    t date := TO_DATE(StartDate,'YYYY-MM-DD');
    sqladd_date := 'and EFFDATE = ' || t;执行时:
    SQL> exec REPORT_DY_YWTOTAL(0,'2006-11-3');begin REPORT_DY_YWTOTAL(0,'2006-11-3'); end;ORA-01722: 无效数字
    ORA-06512: 在"CMAM.REPORT_DY_YWTOTAL", line 62
    ORA-06512: 在line 1第一个参数是没有问题的
    之所以是无效数字
    是因为t的值变成了03-11月-06
    而effdate的值是2006-11-3
    所以无法比较然后我就直接写成:
    t date := TO_DATE('2006-11-3','YYYY-MM-DD');
    发现t的值仍然是03-11月-06但是,我在command window里面
    SQL> select TO_DATE('2006-11-3','YYYY-MM-DD') from dual;TO_DATE('2006-11-3','YYYY-MM-DD
    ------------------------------
    2006-11-3这是正常的,就是在存储过程里就不行了。非常感谢各位朋友关心我的问题,也希望我的问题能尽快解决!再次感谢各位!
      

  11.   

    这是你在oracle管理平台中看到的格式把
    时间字段,在不同的数据库软件中有不同的显示方式
    在oracle 管理平台中就是你看到的那样
    但是在toad中又是不同的显示方式
      

  12.   


    sqladd_date := 'and EFFDATE = ' || TO_DATE(StartDate,'YYYY-MM-DD');
    对于动态的执行的sql.里面都是串连接的。TO_DATE(StartDate,'YYYY-MM-DD');在这里是不能使用的。
    就用串连接就可以了。
      

  13.   

    sqladd_date := 'and EFFDATE = ' || TO_DATE(StartDate,'YYYY-MM-DD');改为 sqladd_date := ' and to_char(EFFDATE,''yyyy-mm-dd'') = '||StartDate;