簡體   English   中英

如何在Oracle表的varchar列中的第2個和第4個char之后插入“/”

[英]How to Insert '/' after 2nd and 4th char in varchar column of an Oracle table

我是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

我怎樣才能做到這一點? 請幫我。 提前致謝。

你可以寫:

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 '%/%'

這將工作:

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

用regexp。

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 '%/%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM