如何在Oracle表的varchar列的第二个和第四个字符后插入'/'

时间:2018-12-03 05:34:10

标签: sql oracle oracle11g oracle10g

我是Oracle新手,正在Oracle 10g中工作。我有一个表WW_WAGEMAST,它有一个类型为varchar2(11)的列,用于保存PF_Join_date。它的日期格式为ddmmyyyydd/mm/yyyy。我想将所有日期转换为dd / mm / yyy单一格式。我该怎么办?

例如-当前情况:

PF_JOIN_DATE
------------
01/04/2018 
02042018 
03042018 
04/04/2018 
05042018

我需要将所有内容都更改为这样的单一格式:

PF_JOIN_DATE
---------------
01/04/2018 
02/04/2018 
03/04/2018 
04/04/2018 
05/04/2018

我该怎么做?请帮我。预先感谢。

3 个答案:

答案 0 :(得分:3)

您可以写:

update WW_WAGEMAST
set PF_JOIN_DATE = substr(PF_JOIN_DATE, 1, 2) || '/' ||
                   substr(PF_JOIN_DATE, 3, 2) || '/' ||
                   substr(PF_JOIN_DATE, 5, 4)
where PF_JOIN_DATE not like '%/%'

答案 1 :(得分:0)

这将起作用:

CREATE TABLE d061_Table1
    ("PF_JOIN_DATE" varchar2(10))
;

INSERT ALL 
    INTO d061_Table1 ("PF_JOIN_DATE")
         VALUES ('01/04/2018')
    INTO d061_Table1 ("PF_JOIN_DATE")
         VALUES ('02042018')
    INTO d061_Table1 ("PF_JOIN_DATE")
         VALUES ('03042018')
    INTO d061_Table1 ("PF_JOIN_DATE")
         VALUES ('04/04/2018')
    INTO d061_Table1 ("PF_JOIN_DATE")
         VALUES ('05042018')
SELECT * FROM dual
;

select * from d061_Table1;
update d061_Table1 set PF_JOIN_DATE=
(substr(PF_JOIN_DATE, 1, 2) || '/' ||
          substr(PF_JOIN_DATE, 3, 2) || '/' ||
          substr(PF_JOIN_DATE, 5, 4))
where not regexp_like(PF_JOIN_DATE, '^[0-9]{2,}/{1}[0-9]{2,}/{1}[0-9]{4,}$');

select * from d061_Table1;

output:
01/04/2018
02/04/2018
03/04/2018
04/04/2018
05/04/2018

答案 2 :(得分:0)

使用正则表达式。

update plv_test_table t
set t.pf_join_date = regexp_replace(t.pf_join_date, '^(\d{2})(\d{2})(\d{4})$','\1/\2/\3')

(可选)-根据表的大小,更新全部或部分行的速度可能更快。没有where子句,此查询仍然正确。

where t.pf_join_date not like '%/%'