[데이터베이스] 16일차 - 함수(숫자, 문자), 정규식 :: 소림사의 홍반장!

day 4

 

 

2012/08/17 - [Dev. 참고자료] - 정규식

 

2012/08/17 - [Dev. 데이터베이스/SQL 예제] - [SQL 문제] 경로에서 함수를 이용한 폴더명, 파일명, 확장자명 구하기

 

2012/08/18 - [Dev. 데이터베이스/SQL 예제] - [SQL 문제] 정규식을 활용하여 경로에서 함수를 이용한 폴더명, 파일명, 확장자명 구하기

 

2012/08/18 - [Dev. 데이터베이스/SQL 예제] - [SQL 문제] 정규식을 활용하여 원하는 형태로 출력하라.

 

/* 짚고 가기 */
--오라클의 인덱스는 1부터 시작한다.
--between A and B 는 이상, 이하로 적용된다.
--null 값 비교는 = 비교가 아니라 is, is not 연산자 사용

 

숫자 함수


round(n[,정수]) : 반올림함수, 뒤의 정수는 반올림되는 소수점 자릿수
    select round(0.55), round(0.55, 1), round(500.5, -3)
    from dual;

 

 

mod(n1, n2) : n1을 n2로 나눈 나머지
    select mod(10,2), mod(9,2)
    from dual;

 

 

power(n2, n1) : n2의 n1 승
    select power(10, 2), power(2, 10)
    from dual;

 

 

sqrt(n) : n의 제곱근
    select sqrt(100), round(sqrt(3),2), sqrt(144)
    from dual;

 

 

trunc(n1[, n2]) : 절삭 ( 결과값은 내림과 같음 ) 참고) 나이대 구할때 유용
    select trunc(55.55), trunc(55.55, -1), trunc(55.55, 1)
    from dual;

 

 

 

문자 함수


ascii(char) : char를 아스키 코드로 변환

chr(code) : 코드를 문자로 변환
    select chr(65),    -- A 반환
    ascii('A'),              -- 65 반환
    ascii('박')              -- 캐릭터셋에 맞는 숫자 반환
    from dual;

 

 

concat(char1, char2) : char1 과 char2 의 문자를 합치기
    select concat('완', '샘'), '완샘'||'짱!'   -- 파이프기호를 이용한 문자 결합이 더 많이 쓰임
    from dual;

 

 

INITCAP(char1) : 단어 앞글자 대문자로 바꾸기
    SELECT INITCAP('the soap') "Capitals"
    FROM DUAL; 
 


lower, upper : 소문자, 대문자로 변환
    select lower('ABCD'), upper('aBcD')
    from dual;

 

 

 

반짝 테스트!

ex) 누구씨의 연봉은 얼마입니다. => steven씨의 연봉은 288000입니다.

nvl(result, 0) : result값이 null 이면 0을 반환
    select lower(first_name)||'씨의 연봉은 '||(salary*12+nvl(commission_pct*salary,0))||' 입니다.' as "직원의 연봉"
    from employees;

 

 

lpad(expr1, n[, expr2]) : 좌측부터 빈공간 채우고 정렬(우측정렬)
    select lpad(first_name, 10)
    from employees;

 

 

rpad(expr1, n[, expr2]) : 우측부터 빈공간 채우고 정렬(좌측정렬)
    select rpad(first_name, 10)
    from employees;

 

 

ltrim(char[,set]), rtrim, trim : 빈공간 제거 함수(내부공간은 제거 안함)
    select ltrim('   !  완샘  !   '), rtrim('   !  완샘  !   '), trim('   !  완샘  !   '),
    ltrim('mbmb mb  ! mb 완샘 mb ! mb  mbmb', 'mb')
    from dual;

 


replace(char,search_string[,replacement_string]) : 글자 교체 및 삭제
    select replace(first_name, 's'), first_name,
    replace(first_name, 'r', '♥')
    from employees;

 

 

substr(char,position[,substring_length]) : 문자열에서 원하는 부분 추출
    select substr('배고파 밥먹어야 해~', 5) substr, --5번째부터 문자열 출력
    substr('배고파 밥먹어야 해~', 5, 4) substr,         -- 5번째부터 문자열 4개까지 출력
    substr('배고파 밥먹어야 해~', -2) substr,         -- 뒤에서부터 두번째문자열부터 출력
    substrb('배고파 밥먹어야 해~', 7) substrb,         -- 7바이트째부터 출력
    substrc('배고파 밥먹어야 해~', 5) substrc         -- 5번째 단어부터 출력
    from dual;

 

 


instr(string, substring[, position[,occurence]]) : 글자가 있는 위치값 반환
instr(대상문자열, 찾을문자열, 시작위치, 몇번째)
    select instr('밥!밥!밥!', '밥'), instr('밥!밥!밥!', '밥', 2),
      instr('밥!밥!밥!', '밥', 2, 2)
    from dual;

 

 

 


정규식
regexp_replace, regexp_substr, regexp_instr, regexp_count

    select regexp_instr('abc', 'b'),
      regexp_instr('abcdefg', '[gbi]'),    --g or b or i 중에 하나
      regexp_replace('abcdefg', '[abcg]', '*'),
      regexp_replace('010-9895-2939d', '[^0-9]')   -- 숫자가 아닌것을 거르기
    from dual;

 

 

정규식 표현
? (0,1)
* (0이상)
+(1이상)
{n} (n개)
{n, } (n이상)
{n, m} (n이상 m이하)

 

select regexp_replace('ab1c2d3e45fg', '[a-zA-Z]{2,}') "1",    -- 연속하는 영문자 제거
  regexp_replace('ab1c2d3e45fg',
  '([a-z])([0-9])([a-z])|([0-9])([a-z])([0-9])',
  '\1\3\5') "2",                                               -- 연속하지 않는 숫자 제거
  regexp_replace('123123-abcddsf-32-dfsf-2', '(-)[a-z0-9A-Z]+', '\1') "3" --  -사이의 문자들을 제거
from dual;

 

 

 

[[:alnum:]] : 알파벳 + 숫자를 뜻함
. : 아무글자나 하나
\. : . 그자체를 의미

 

regexp_substr
    SELECT
      REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA',
                ',[^,]+,') "REGEXPR_SUBSTR"
      FROM DUAL;

 

 

SELECT
  REGEXP_SUBSTR('http://www.example.com/products',
                'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR"
  FROM DUAL;

 

match_param
i : 대소문자를 가리지 않음
c : 대소문자를 가림
m : 여러줄일 경우에 모두 적용
x : 공백문자를 무시
 
    SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1)    
    "REGEXP_SUBSTR" FROM DUAL;

SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 4)
"REGEXP_SUBSTR" FROM DUAL;

 

다른 카테고리의 글 목록

Dev. 640시간 뭉개기/강의내용정리 카테고리의 포스트를 톺아봅니다