我是Oracle新手,正在Oracle 10g中工作。我有一个表WW_WAGEMAST
,它有一个类型为varchar2(11)
的列,用于保存PF_Join_date
。它的日期格式为ddmmyyyy
和dd/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
我该怎么做?请帮我。预先感谢。
答案 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 '%/%'