用于捕获数据库中 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}');
答案 0 :(得分:2)
首先,建议您不要在数据库中使用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
TO_DATE
子句
SELECT *
FROM table_name
WHERE TO_DATE (birth_date default null on conversion error,'MM/DD/YYYY') IS NULL
答案 1 :(得分:-1)
您可以使用以下查询获取所需格式以外的其他内容:
select * from dual where regexp_like('2013/24 / feb','[0-9] {2}。[[:alpha:]] {3}。[0-9] {4}')