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시간 뭉개기 > 강의내용정리' 카테고리의 다른 글
[데이터베이스] 18일차 - 날짜 함수, 변환 포맷 함수, null 처리 함수, 조건 제어 함수 (0) | 2012.08.21 |
---|---|
[데이터베이스] 17일차 - 정규식복습, 날짜 함수 (0) | 2012.08.20 |
[데이터베이스] 15일차 - select(where,like,order by,in,between), 함수 (0) | 2012.08.16 |
[데이터베이스] 14일차 - 테이블 생성.변경.삭제.관리, 제약조건, 데이터 삽입.수정.삭제, (0) | 2012.08.14 |
[데이터베이스] 13일차 - 오라클 설치, 명령어, 권한, 롤 (0) | 2012.08.13 |