REGEXP_LIKE用于任何不像MM / DD / YYYY的东西

时间:2018-03-21 09:21:25

标签: oracle regexp-like

用于捕获数据库中 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}'); 

2 个答案:

答案 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}')