게시일: Oct 15, 2011 2:45:3 AM
- CONCAT(char1, char2) : 두 문자를 붙이는 기능. '||'과 동일한 기능.
select concat('M.Jay', 'Hana'), concat(concat('M.Jay', ' '), 'Hana'), 'M.Jay'||' '||'Hana'||' '||'☆' from dual;
---------------------------------------------------------------------------------------------------
M.JayHana M.Jay Hana M.Jay Hana ☆
-INITCAP(char) : 첫 문자는 대문자로, 나머지는 무조건(대소문자 상관없이) 소문자로 변환
select initcap('abCdEfg'), initcap('abcdefg'), initcap('ABCDEFG') from dual;
----------------------------------------------------------------------------
Abcdefg Abcdefg Abcdefg
select initcap('iamaboy'), initcap('i am a boy'), initcap('i김am#a@boy') from dual;
-----------------------------------------------------------------------------------
Iamaboy I Am A Boy I김Am#A@Boy
--> 여기서 알 수 있듯이, 영문자를 제외한 모든 문자(공백,한글,특수문자 등)를 구분자(delimiter)로 인식하고
첫 번째 문자를 영문자로 변환한다.
- LOWER(char) : 모든 문자를 소문자로 변환
- UPPER(char) : 모든 문자를 대문자로 변환
select lower('aBcDefg'), upper('aBcDefg') from dual;
----------------------------------------------------
abcdefg ABCDEFG
select 1 from dual where 'abcdefg' = 'ABCDEFG'; --> no data found
select 1 from dual where lower('abcDEfg') = lower('ABCdeFG'); --> 1
select 1 from dual where upper('abcDEfg') = upper('ABCdeFG'); --> 1
** 개인적인 경험상, 사용하는데 유용한 경우 **
DICTIONARY 정보를 이용하여 object(function, trigger, procedure 등) 에서 특정 컬럼을 사용하고 있는
obeject를 찾고 싶은 경우에 활용하면 좋다.
select * from user_source where upper(text) like '%'||upper('pid')||'%';
-> user_source 혹은 all_source 를 사용 (모든 object들의 script를 가지고 있음)
-> 모든 object 의 script를 대문자로 변환하여 'pid' 가 포함되어 있는(소문자든, 대문자든) row를 찾는다.
- LPAD(expr1, n [, expr2]) 와 RPAD(expr1, n [, expr2]) : n 자리수만큼 길이를 늘려서 반환. 자리가 비어있는 공간은 expr2로 채움.
select lpad('abc', 7), lpad('abc', 7, '#'), rpad('abc', 7), rpad('abc', 7, '#') from dual;
------------------------------------------------------------------------------------------
abc ####abc abc abc####
- LTRIM(char [, set]) 과 RTRIM(char [, set]) : char에서 set으로 지정된 문자를 왼쪽에서 제거한 결과를 반환
select ltrim('ABCDEFG'), ltrim('ABCDEFG', ' '), ltrim('ABCDEFG', 'AB'), ltrim('ABCDEFG', 'BC') from dual;
---------------------------------------------------------------------------------------------------------
ABCDEFG ABCDEFG CDEFG ABCDEFG
-> 'BC'의 문자가 가장 왼쪽이 아님, 원래값 그대로 반환
ABCDEFG ABCDEFG ABCDE ABCDEFG
- SUBSTR(char, position, length) : char를 position부터 length개의 문자를 잘라냄.
select substr('2011-10-15 11:23:45', 1, 10), substr('2011-10-15 11:23:45', 12, 8) from dual;
--------------------------------------------------------------------------------------------
2011-10-15 11:23:45
select substr('2011-10-15 11:23:45', 0, 10) --> 2011-10-15 : 0부터 시작이므로 첫번째 잘부터 10자리 잘라냄
, substr('2011-10-15 11:23:45', 12) --> 11:23:45 : length 가 생략된 경우로서 12자리부터 끝까지 잘라냄
from dual;
- SUBSTRB(char, position, length) : substr과 기능은 동일하지만 문자열의 바이트 수를 잘라냄
select 'I am Insu, I''m Korean', substrb('I am Insu, I''m Korean', 6, 4), substrb('나는 인수, 한국인', 6, 4) from dual;
-----------------------------------------------------------------------------------------------------------------------
I am Insu, I'm Korean Insu 인수
- REPLACE(char, search_string, replace_string) : char에서 search_string을 찾아 replace_string으로 변환
replace_string 생략시는 null로 대체
select replace('You r not alone', 'You', 'We'), replace('U r not alone', 'U') from dual;
----------------------------------------------------------------------------------------
We r not alone r not alone
- TRANSLATE(expr, from_string, to_string) : replace와 기능상 동일하지만 문자 자체를 일 대 일로 대응해서 대체함.
select replace('You r not alone', 'You', 'We'), translate('You r not alone', 'You', 'We') from dual;
Y -> W 로 변환
o -> e 로 변환
u -> null로 변환 (u는 사라짐)
----------------------------------------------------------------------------------------------------
We r not alone We r net alene
select translate('You r not alone', 'yOU', 'We') from dual;
-----------------------------------------------------------
You r not alone -> (주의) 대소문자가 일치하지 않으므로 변경된 내용 없음
전화번호에 텍스트가 있는 경우 전화번호만 구하기
select translate (STR, '0123456789'||STR, '0123456789')
from (select '(엄마)010-1234*&^-56,78(핸드폰)' STR
from dual);
-----------------------------------------------------------
01012345678
-----------------------------------------------------------
- TRIM([LEADING, TRAILING, BOTH] [, trim_character] [FROM] trim_source)
: 문자열의 왼쪽이나 오른쪽 혹은 양쪽 모두에서 지정된 문자나 공백을 제거한 결과를 반환
select trim(leading from ' ABCD ') --> ABCD 왼쪽 공백 제거
, length(trim(leading from ' ABCD ')) --> 5
, trim(trailing from ' ABCD ') --> ABCD 오른쪽 공백 제거
, length(trim(trailing from ' ABCD ')) --> 5
, trim(both from ' ABCD ') --> ABCD 양쪽 공백 제거
, length(trim(both from ' ABCD ')) --> 4
, trim(' ABCD ') --> ABCD 생략시는 default로 both
, length(trim(' ABCD ')) --> 4
from dual;
select trim(leading from ' ABCD ') --> ABCD 왼쪽 공백 제거
, length(trim(leading from ' ABCD ')) --> 7
, trim(trailing from ' ABCD ') --> ABCD 오른쪽 공백 제거
, length(trim(trailing from ' ABCD ')) --> 7
, trim(both from ' ABCD ') --> ABCD 양쪽 공백 제거
, length(trim(both from ' ABCD ')) --> 4
, trim(' ABCD ') --> ABCD 생략시는 default로 both
, length(trim(' ABCD ')) --> 4
, trim(leading 'A' from 'AABBCCDD') --> BBCCDD
, trim(trailing 'D' from 'AABBCCDD') --> AABBCC
from dual;
select rtrim('ABCDEFG'), rtrim('ABCDEFG', ' '), rtrim('ABCDEFG', 'FG'), rtrim('ABCDEFG', 'EF') from dual;
---------------------------------------------------------------------------------------------------------