정규식 REGEXP_LIKE 함수 사용하기(Oracle 10g)

Posted by MD워시퍼
2013. 6. 28. 20:31 Study/Oracle Sql
728x90

* 오라클에서 문자 포함된 관측치 선택 및 제거;

* 입력설계 문제로 고객명에 이상한 값들이 들어가서 그 변수 처리 방법을 찾다가 oracle 10g에 새로운 정규식 함수가 있네요

* 한글인 경우 처리가 좀 애매모호한데 정확한 값을 찾지 못해서 일단 '황' '힛'을 넣었습니다.

* 코드변환을 해서 한글을 찾아야 할듯 함.

 

SELECT REGEXP_instr(CUST_NM,'[a-z]|[A-Z]'),  -- 영문자 위치 반환

              a.* 

FROM   customer.tza011 a

WHERE  1=1

  and  REGEXP_LIKE(CUST_NM, '[^[:digit:]]')           -- 첫글자가  문자

  and NOT REGEXP_LIKE(CUST_NM,'[a-z]|[A-Z]')   -- 영문자 제외

  and NOT REGEXP_LIKE(CUST_NM,'[0-9]|[@/.;*^,★☆#!]|[?]|[-]|[ㄱ-ㅎ]|[ㅏ-ㅣ]')  -- 특수문자제회

  --and   REGEXP_LIKE(CUST_NM, '.*가.*|.*나.*|.*다.*');  -- 가 나다 포함

  and  NOT REGEXP_LIKE(CUST_NM,'[가-황]')                 -- 한글제외1

  and  NOT REGEXP_LIKE(CUST_NM, '[가-힛].*' )             -- 한글제외2

  and  NOT REGEXP_LIKE(CUST_NM, '[A-Z]|[?@/.히]' )  --특수문자 제외

  and  NOT REGEXP_LIKE(CUST_NM,'[ㄱ-ㅎ]')                    -- 자음 포함된 관측치 제외

  AND  NOT REGEXP_LIKE(CUST_NM,'^[a-z]|[A-Z]');         -- 첫글자가 영문자인경우 제외


<참조예제>

SELECT DISTINCT SNU_EDU_TYPE FROM  RM_TEST WHERE NOT REGEXP_LIKE(SNU_EDU_TYPE,'^[0-9]')


- 출처 : 통계분석연구회


[ORACLE] MAX 행의 다른 컬럼 조회하기

Posted by MD워시퍼
2013. 6. 18. 20:39 Study/Oracle Sql
728x90

필드 a와 같은 record에 있는 필드 b의 값을 가져오는 방법.

first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다.

MIN(B) (DENSE_RANK FIRST ORDER BY A [ASC|DESC])

MAX(B) (DENSE_RANK LAST ORDER BY A [ASC|DESC])


【형식】
집합함수 KEEP (
 DENSE_RANK FIRST ORDER BY
    expr [DESC|ASC][NULL{FIRST|LAST}],...)


【예제】
SQL> select
  2  min(salary) keep (dense_rank first order by salary) "Worst",
  3  max(salary) keep (dense_rank last order by salary) "Best"
  4  from employees
  5  order by id;

     Worst       Best
---------- ----------
       220        250

SQL> select * from employees;

        ID    DEPT_NO NAME           SALARY      BONUS
---------- ---------- ---------- ---------- ----------
      1101         10 Cho               250        125
      1102         20 Joe               240        100
      1103         10 kim               250        100
      1104         20 jijoe             220        100

 

1. MIN(a) 의 경우

MIN(b) KEEP(DENSE_RANK FIRST ORDER BY a)

2. MAX(a)의 경우

MAX(b) KEEP(DENSE_RANK FIRST ORDER BY a DESC)

와 같이 사용하면 a의 값에 따른 필드 b의 값을 가져 올 수 있습니다.

 

ex) table명 table1

field1    field2
1    c
2    b
3    a

SQL> select MIN(field1), MIN(field2) KEEP(DENSE_RANK FIRST ORDER BY field1) AS field2 from table1
결과>1, c

SQL> select MAX(field1), MAX(field2) KEEP(DENSE_RANK LAST ORDER BY field1) AS field2 from table1
결과> 3 , a


<출처 : 어느 가을날의 전환점>


TOAD로 오라클11g 에 접속이 안되는 현상

Posted by MD워시퍼
2013. 4. 30. 10:55 Study/Oracle Sql
728x90

내 PC에 깔려있는 TOAD로는 왜 오라클11G에 접속이 안되는걸까 

ORA-01017:invalid username/password:logon denied 에러 창이 뜨는데..

 

1. id입력후

2 . password input BOX를 빈칸으로 두자

3. password 입력창이 뜨는가?

4. password 입력후 연결 되는 것을 볼수 있을것이다.


[Oracle] 특정일부터 현재까지의 날짜를 가져오는 방법

Posted by MD워시퍼
2011. 2. 7. 11:12 Study/Oracle Sql
728x90
SELECT TO_CHAR(TO_DATE(V) + (LEVEL - 1),'YYYYMMDD')
FROM (SELECT '20101010' v FROM DUAL)
CONNECT BY LEVEL <= SYSDATE - TO_DATE(V) + 1

<출처> www.oracleclub.com - 오라클클럽