在一个名为customers的表中,我有一个varchar2列(financial_month)
该列应该是一个日期列,但由于它是一个varchar2列,并且由于编码错误,因此有许多数据不是日期格式。
例如:0.15已存储在一个记录和许多其他错误条目中。
现在我想消除所有错误的条目 我应该遵循什么流程? 我毫不知道。我也无法识别错误的条目。我唯一知道的是有超过1000个错误的条目。
如何从此列中删除所有错误的条目?
答案 0 :(得分:0)
您可以使用类似
的内容WHERE REGEXP_LIKE(financial_month, '^[0-9]{2}[.][0-9]{2}[.][0-9]{4}$')
查找日期值为
的行
(这是日期格式DD.MM.YYYY或MM.DD.YYYY)
或更精确的正则表达式
'^[0-3][0-9][.][0-1][0-9][.](19|20)[0-9]{2}$'
表示DD.MM.YYYY格式。
答案 1 :(得分:0)
假设"财政月份的格式"必须是MM / YYYY:
CREATE TABLE fm_t (fm VARCHAR2(30));
INSERT INTO fm_t VALUES ('01/2015');
INSERT INTO fm_t VALUES ('0.5');
INSERT INTO fm_t VALUES ('whatsever');
INSERT INTO fm_t VALUES ('02/2015');
SELECT * FROM fm_t;
CREATE OR REPLACE FUNCTION fm_f(fm IN VARCHAR2) RETURN INTEGER IS
d DATE;
BEGIN
d := TO_DATE(fm, 'FMMM/YYYY');
RETURN 1;
EXCEPTION WHEN OTHERS THEN
RETURN 0;
END;
/
DELETE fm_t WHERE fm_f(fm) <> 1;
SELECT * FROM fm_t;
DROP FUNCTION fm_f;
DROP TABLE fm_t;