Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何插入'/';在Oracle表的varchar列中的第2个和第4个字符之后_Sql_Oracle_Oracle11g_Oracle10g - Fatal编程技术网

Sql 如何插入'/';在Oracle表的varchar列中的第2个和第4个字符之后

Sql 如何插入'/';在Oracle表的varchar列中的第2个和第4个字符之后,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,我是Oracle的新手,在Oracle 10g中工作。我有一个表WW\u WAGEMAST,它有一个类型为varchar2(11)的列,用于保存PF\u Join\u date。它的日期格式为ddmmyyyy和dd/mm/yyyy。我想将所有日期转换为单一格式dd/mm/yyy。我该怎么做 例如——当前情况: PF_JOIN_DATE ------------ 01/04/2018 02042018 03042018 04/04/2018 05042018 我需要将所有内容更改为以下格

我是Oracle的新手,在Oracle 10g中工作。我有一个表
WW\u WAGEMAST
,它有一个类型为
varchar2(11)
的列,用于保存
PF\u Join\u 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
我该怎么做?请帮帮我。提前感谢。

您可以写:

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 '%/%'
你可以写:

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
这将有助于:

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

使用varchar for date的糟糕设计使用date数据类型,而不是“我想将所有日期转换为单一格式dd/mm/yyyy”-为什么?。由于您计划更改记录,我建议您完全修改表定义,并将
PF\u JOIN\u DATE
的数据类型更改为DATE。只需使用类似于返回日期的函数将其放入另一列,删除
PF_Join_date
并将此列重命名为
PF_Join_date
永远不要在
varchar
列中存储日期值。您当前的问题是该错误设计决策的直接结果。使用varchar for date的错误设计使用date数据类型,而不是“我想将所有日期转换为单一格式dd/mm/yyyy”-为什么?。由于您计划更改记录,我建议您完全修改表定义,并将
PF\u JOIN\u DATE
的数据类型更改为DATE。只需使用类似于返回日期的函数将其放入另一列,删除
PF_Join_date
并将此列重命名为
PF_Join_date
永远不要在
varchar
列中存储日期值。您当前的问题是该错误设计决策的直接结果。非常感谢您的支持和努力。它工作得很好。@FARHAN你现在可以给它打个绿色的勾了。非常感谢你的支持和努力。它工作得很好。@FARHAN你现在可以给它打个绿色记号了