问下oracle 的问题,只截取年月的比如
select to_char(sysdate,'yyyymm') from dual
有没有不用to_char函数来截取年月的办法?

解决方案 »

  1.   

    SQL> SELECT extract(YEAR FROM SYSDATE) || extract(MONTH FROM SYSDATE) FROM dual;
     
    EXTRACT(YEARFROMSYSDATE)||EXTR
    --------------------------------------------------------------------------------
    20111
     
    SQL> 
      

  2.   

    SQL> SELECT extract(YEAR FROM SYSDATE) ||
      2         lpad(extract(MONTH FROM SYSDATE), 2, '0')
      3    FROM dual;
     
    EXTRACT(YEARFROMSYSDATE)||LPAD
    --------------------------------------------
    201101
     
    SQL> 
      

  3.   

    好好的 TO_CHAR 为什么不用呢,用其它办法更麻烦
      

  4.   

    -- to_char()只是将日期数据以怎样的格式显示出来,要截取日期,可以用trunc()函数,
    -- 实例如下:
    sys@SZTYORA> conn / as sysdba
    已连接。
    sys@SZTYORA> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';会话已更改。sys@SZTYORA> select sysdate from dual;SYSDATE
    -------------------
    2011-02-09 10:43:32sys@SZTYORA> select trunc(sysdate) from dual;TRUNC(SYSDATE)
    -------------------
    2011-02-09 00:00:00sys@SZTYORA> select trunc(sysdate,'mm') from dual;TRUNC(SYSDATE,'MM')
    -------------------
    2011-02-01 00:00:00sys@SZTYORA> select trunc(sysdate,'yyyy') from dual;TRUNC(SYSDATE,'YYYY
    -------------------
    2011-01-01 00:00:00sys@SZTYORA> select trunc(sysdate,'ww') from dual;TRUNC(SYSDATE,'WW')
    -------------------
    2011-02-05 00:00:00
      

  5.   

    to_char() 简单,并且效率高。为什么不用 
    用 SELECT extract(YEAR FROM SYSDATE) || extract(MONTH FROM SYSDATE) FROM dual;
    效率低,在优化sql中最好不用|| 
      

  6.   

    同意头上的 to_char()是最好的 为什么不用呢?