Как вставить '/' после 2-го и 4-го символа в столбце varchar таблицы Oracle - PullRequest
0 голосов
/ 03 декабря 2018

Я новичок в Oracle и работаю в Oracle 10g.У меня есть таблица WW_WAGEMAST и в ней есть столбец типа varchar2(11) для сохранения PF_Join_date.Дата имеет формат ddmmyyyy и dd/mm/yyyy.Я хочу конвертировать всю дату в едином формате дд / мм / гггг.Как я могу это сделать?

Например - текущая ситуация:

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 голосов
/ 03 декабря 2018

это будет работать:

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
0 голосов
/ 03 декабря 2018

С регулярным выражением.

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 '%/%'
0 голосов
/ 03 декабря 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 '%/%'
...