====== REGEXP_LIKE ======
===== 정의 =====
- 오라클 정규표현식의 하나.
===== 이메일 형식 체크 =====
- 이메일 형식 체크(Validate)이 맞는지 확인하는 쿼리이다.
select email
from member
where regexp_like(email,'[^ ]+@[^.][^ ]+\..[^ ]+');
- 이메일 형식체크에 quotes 를 포함하여 아래의 구문을 따른다.
'[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'
\\ http://stackoverflow.com/questions/787167/validation-on-email-postcode-fields-in-sql-oracle
===== 날짜형식 체크 =====
- 날짜형식 체크
ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
with t as (
select '01-02-2007' str from dual union all
select '7-8-2007' str from dual union all
select '2007/03/28' str from dual union all
select '10-MAY-07' str from dual
)
select str
, to_date(str, case when regexp_like(str,'[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}')
then 'dd-mm-yyyy'
when regexp_like(str,'[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}')
then 'yyyy/mm/dd'
when regexp_like(str,'[0-9]{2}-[A-Z]{3}-[0-9]{2}')
then 'dd-mon-yy'
end) as date1
from t;
\\ ORA-01843: not a valid month 가 나올경우 NLS_LANG 을 확인해 본다. \\
with t as (
select '01-02-2007' str from dual union all
select '7-8-2007' str from dual union all
select '2007/03/28' str from dual union all
select '10-MAY-07' str from dual
)
select str
, to_date(str, case when regexp_like(str,'[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}')
then 'dd-mm-yyyy'
when regexp_like(str,'[0-9]{4}/[0-9]{1,2}/[0-9]{1,2}')
then 'yyyy/mm/dd'
when regexp_like(str,'[0-9]{2}-[A-Z]{3}-[0-9]{2}')
then 'dd-mon-yy'
end,'NLS_DATE_LANGUAGE=AMERICAN') as date1
from t;