用于捕获数据库中不是表达式MM/DD/YYYY的任何内容的正则表达式是什么。(我想要除了上述格式之外的所有内容,可以是 dd-mon-yy 或 yyyy/mm/dd 等)
我正在使用下面的正则表达式查询
select birth_date FROM table_name where not regexp_like (birth_date, '[0-9][0-9]/[0-9][0-9]/[0-9]{4}');
用于捕获数据库中不是表达式MM/DD/YYYY的任何内容的正则表达式是什么。(我想要除了上述格式之外的所有内容,可以是 dd-mon-yy 或 yyyy/mm/dd 等)
我正在使用下面的正则表达式查询
select birth_date FROM table_name where not regexp_like (birth_date, '[0-9][0-9]/[0-9][0-9]/[0-9]{4}');
首先,给你一个建议,不要VARCHAR2 / CHAR
在数据库中使用 DATE 类型。
您可以使用创建一个函数TO_DATE
CREATE OR REPLACE FUNCTION validmmddyyyy (p_str IN VARCHAR2)
RETURN NUMBER
AS
V_date DATE;
BEGIN
V_Date := TO_DATE (p_str, 'MM/DD/YYYY');
RETURN 1;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END;
select validmmddyyyy('09/12/2018') from DUAL;
1
select validmmddyyyy('13/12/2018') from DUAL;
0
select validmmddyyyy('2018/12/01') from DUAL;
0
使用您的查询,例如,
select birth_date FROM table_name where validmmddyyyy(birth_date) = 0
如果你有幸使用 Oracle 12c R2,你可以使用DEFAULT..ON..CONVERSION ERROR
子句 ofTO_DATE
SELECT *
FROM table_name
WHERE TO_DATE (birth_date default null on conversion error,'MM/DD/YYYY') IS NULL
您可以使用以下查询来获取所需格式以外的其他格式:
select * from dual where not regexp_like('2013/24/feb','[0-9]{2}.[[:alpha:]]{3}.[0-9]{4}')