oracle regex_replace 保留数字和反斜杠
oracle regex_replace to keep digit and backslash
我的 excel 文件在日期字段中包含一些垃圾数据。
日期格式为 1/2/2015 格式。我正在尝试将该文件加载到 varchar 字段中的阶段 table 并应用正则表达式替换函数在加载到 main table
之前清理错误数据
有人可以给我提供这个
的 suitable 表达式吗
create table A
(
bad_date varchar2(4000)
);
insert into A
( bad_date)
values ('1/2/2005');
insert into A
( bad_date)
values ('indep');
insert into A
( bad_date)
values ('/');
commit;
create table B
(
good_date date
);
我想使用正则表达式函数来清理不在日期模式中的数据。感谢您的帮助!
你可以用类似的东西接近:
select (case when regexp(bad_date, '^[0-1]?[0-9]/[0-3]?[0-9]/[0-9]{4}$')
then to_date(bad_date, 'MM/DD/YYYY'
end) as converted_date
使用以下内容:
INSERT INTO B (GOOD_DATE)
SELECT TO_DATE(BAD_DATE, 'DD/MM/YYYY')
FROM A
WHERE REGEXP_LIKE(BAD_DATE, '[0-9]+/[0-9]+/[0-9]+')
祝你好运。
我倾向于贡献一个更成熟的正则表达式来匹配 m/d/yyyy
格式的有效日期:
INSERT INTO B (GOOD_DATE)
SELECT TO_DATE(BAD_DATE, 'DD/MM/YYYY')
FROM A
WHERE REGEXP_LIKE(BAD_DATE,
'^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/(19|20)[0-9][0-9]$'
)
灵感来自
- Regex to validate dates in this format d/m/yyyy
- https://www.regular-expressions.info/dates.html
使用 ^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}
模式 regexp_like 符合您的日期格式。
使用以下 insert 语句获取干净的日期数据:
insert into B
select * from
( select to_date(bad_date,
case when
regexp_like(bad_date,'^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}') then
'DD/MM/YYYY'
end) dateConverted
from A)
where dateConverted is not null;
我的 excel 文件在日期字段中包含一些垃圾数据。
日期格式为 1/2/2015 格式。我正在尝试将该文件加载到 varchar 字段中的阶段 table 并应用正则表达式替换函数在加载到 main table
之前清理错误数据有人可以给我提供这个
的 suitable 表达式吗create table A
(
bad_date varchar2(4000)
);
insert into A
( bad_date)
values ('1/2/2005');
insert into A
( bad_date)
values ('indep');
insert into A
( bad_date)
values ('/');
commit;
create table B
(
good_date date
);
我想使用正则表达式函数来清理不在日期模式中的数据。感谢您的帮助!
你可以用类似的东西接近:
select (case when regexp(bad_date, '^[0-1]?[0-9]/[0-3]?[0-9]/[0-9]{4}$')
then to_date(bad_date, 'MM/DD/YYYY'
end) as converted_date
使用以下内容:
INSERT INTO B (GOOD_DATE)
SELECT TO_DATE(BAD_DATE, 'DD/MM/YYYY')
FROM A
WHERE REGEXP_LIKE(BAD_DATE, '[0-9]+/[0-9]+/[0-9]+')
祝你好运。
我倾向于贡献一个更成熟的正则表达式来匹配 m/d/yyyy
格式的有效日期:
INSERT INTO B (GOOD_DATE)
SELECT TO_DATE(BAD_DATE, 'DD/MM/YYYY')
FROM A
WHERE REGEXP_LIKE(BAD_DATE,
'^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/(19|20)[0-9][0-9]$'
)
灵感来自
- Regex to validate dates in this format d/m/yyyy
- https://www.regular-expressions.info/dates.html
使用 ^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}
模式 regexp_like 符合您的日期格式。
使用以下 insert 语句获取干净的日期数据:
insert into B
select * from
( select to_date(bad_date,
case when
regexp_like(bad_date,'^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}') then
'DD/MM/YYYY'
end) dateConverted
from A)
where dateConverted is not null;