如何 把 ‘29-6月 -10’ 这种格式的日期格式成 '2010-06-29'?

解决方案 »

  1.   

    alter session set nls_date_format='yyyy-mm-dd'
      

  2.   

    select to_char(to_date('29-6月 -10','yyyy-MON-dd'),'yyyy-mm-dd') from dual;
      

  3.   


    Connected to:
    Oracle Database 10g Release 10.1.0.2.0 - ProductionSQL> select sysdate from dual;SYSDATE
    ----------
    08-11月-10SQL> alter session set nls_date_format='yyyy-mm-dd';Session altered.SQL> select sysdate from dual;SYSDATE
    ----------
    2010-11-08SQL> 
      

  4.   

    给你个思路,首先把目标字符串内容按照“-”分隔抽取出来,如年 月 日,然后重新组成想要的顺序,用日期函数得到时间。实现抽取方法。CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
        RETURN ty_str_split
    IS
        j INT := 0;
        i INT := 1;
        len INT := 0;
        len1 INT := 0;
        str VARCHAR2 (4000);
        str_split ty_str_split := ty_str_split ();
    BEGIN
        len := LENGTH (p_str);
        len1 := LENGTH (p_delimiter);    WHILE j < len
        LOOP
            j := INSTR (p_str, p_delimiter, i);        IF j = 0
            THEN
                j := len;
                str := SUBSTR (p_str, i);
                str_split.EXTEND;
                str_split (str_split.COUNT) := str;            IF i >= len
                THEN
                    EXIT;
                END IF;
            ELSE
                str := SUBSTR (p_str, i, j - i);
                i := j + len1;
                str_split.EXTEND;
                str_split (str_split.COUNT) := str;
            END IF;
        END LOOP;    RETURN str_split;
    END fn_split;
    /测试:DECLARE
        CURSOR c
        IS
            SELECT *
              FROM TABLE (CAST (fn_split ('1-12-123-1234-12345', '-') AS ty_str_split
                               )
                         );    r c%ROWTYPE;
    BEGIN
        OPEN c;    LOOP
            FETCH c INTO r;        EXIT WHEN c%NOTFOUND;
            DBMS_OUTPUT.put_line (r.column_value);
        END LOOP;    CLOSE c;
    END;
      

  5.   

    --如果你的字段是date类型查询出来29-6月 -10 想改成2010-06-29的话
    1、
    alter session set nls_date_format='yyyy-mm-dd'
    2、
    select to_char(colnum,'yyyy-mm-dd') from tablename
      

  6.   

    你这个思路很好,就是笔误了一下 
    select to_char(to_date('29-6月 -10','dd-MON-yy'),'yyyy-mm-dd') from dual;谢谢大家
      

  7.   

    如果年份是2位数,用dd-MON-yy可能会出错,用dd-MON-rr好点。