除了用substr方法拼接还有更好的方法直接调用不

解决方案 »

  1.   

    SELECT substr('20161230',1,4)||'-'||substr('20161230',5,2)||'-'||substr('20161230',7,2)  as REGDATE from dual
    这样写是不是影响效率
      

  2.   

    表达式运算是无所谓效率的,不过下面这样写比较易读。而且日期值不对时(比如20160230)还会报错,一举两得。
    SELECT TO_CHAR(TO_DATE('20161230','yyyymmdd'),'yyyy-mm-dd')  as REGDATE from dual
      

  3.   


    -- 如果不验证数据的有效性,只是机械的拼接,可以考虑一下正则SQL> 
    SQL> with m as (
      2  select '20161230' c from dual
      3  )
      4  select regexp_replace(c, '(....)(..)(..)','\1-\2-\3') result from m;
    RESULT
    ----------
    2016-12-30SQL>