Step 2. Single-Row Function!
- Sub : 문자함수
얼마만에 Step 2로 넘어온건지 모르겠네요..ㅎㅎ
이전에 Step 1인 Select는 모두 다 이해하고 스스로 예제도 더 만들어서 해보고 그러셨나요? 그래야 합니다. 안그러면 안늘어요!!!
이제부터는 조금 복잡 할 수도있는 함수부분을 들어갈겁니다. 먼저 Single-Row Function 이라고 했습니다.
단일 행 함수라고도 하죠 ㅎ 이건 행 하나하나하나에 대한 결과값을 나타내기 때문에 이렇게 부릅니다.
A처리하고 B처리하고 C처리하고 결과내는게 단일행 함수! 그럼 반대되는 개념은? Multiple-Row Function. 복수 행 함수라고하죠.
이건 그럼 어찌될까욤? 여러개의 행을 하나하나 하는 것이아니라 한꺼번에 처리를 해서 결과를 내는겁니다.
이후에 비교를 하면 확실히 느끼게 되실거에요 ㅎ 저도 한번에 이해는 못했으니까요..ㅎ 동병상련이죠 ㅎ
이제 단일행 함수를 본격적으로 들어가 볼께요 ㅎ
단일행 함수에는 여러가지 형태의 함수들이 존재합니다. 언제나 큰그림은 그리고 있어야해요. 어디에 뭐가 포함이 되는지에 대한.
안그러면 다 배우고 나서도 이게 어디에 속하지? 뭐에 속해서 이렇게 나오는거지? 라는 물음이 나오고 개념이 불확실 하다는 것이 나옵니다. 그렇기 때문에 전체적인 큰그림을 그리고 있다면 전혀 헷갈릴 것이 없겠죠 ㅎ 특히 Oracle은 더 그런거 같음..ㅎ
요로코롬 큰 그림을 그려야 합니다. 단일행 함수에는 문자, 숫자, 날짜, 변환, 일반이 있고 변환에는 묵시적 명시적이 있다는것!
그리고 이번 포스트에서는 문자 함수를 다룬다는 것을 알려드리고 시작하겠습니다.
왜 저렇게 나눴는지 궁금하시다구요? 예를 들어 화장실로 할께요..ㅎ 예전에도 화장실로 예를 든게 있었던거 같은데..ㅎ
화장실을 함수라고 할께요. 그리고 들어가는 것과 나오는것으로 하겠습니다. 사람이 화장실로 들어가면 나오는것은? 사람이죠
동물이 화장실로 들어갔다가 나오면? 동물이죠. 이것과 같이 문자가 들어갔다가 나오면 문자 함수죠. 문자가 들어갔다가 숫자로 나오는거?
변환함수에서는 그럴 수 있지만 일반적인 함수에서는 그럴수가 없습니다. 동작자체를 거부하니까요 ㅎㅎ 말이 또 길어지네요..
문자 함수 본격적으로 들어가 보도록 하겠습니다 ㅎ
문자 함수도 자세히 보면 두가지로 세분화를 시킬 수 있습니다.
하나는 Case-Manipulation : 대소문자 변환 함수이고 또다른 하나는 Character-Manipulation : 문자 변환 함수입니다.
여기에서 변환이라고해가지고 다른 숫자나 날짜로 바꾸는 것이 아닌 문자에서 문자로 바꾸는 것을 말합니다.
Case-Manipulation은 무엇이 있느냐 살펴보면 LOWER, UPPER, INITCAP이 있습니다.
Function |
의미 |
사용 예 |
LOWER(column|expression) |
입력 값을 전부 소문자로 변환 |
LOWER(ABC) ->abc |
UPPER(column|expression) |
입력 값을 전부 대분자로 변환 |
UPPER(abc) ->ABC |
INITCAP(column|expression) |
입력 값의 첫 글자만 대문자로 변환 |
INITCAP(abc)->Abc |
잘 아시겠나요?ㅎ 여기서는 간단히 의미와 문법을 살펴보고 아래에서 자세히 예를 들고 실제로 해보면서 볼겁니다 ㅎ
Case-Manipulation을 했으니 Character-manipulation을 보겠습니다. 좀 많아요..ㅎ
Function |
의미 |
사용 예 |
CONCAT(column1|expression1, column2|expression2) |
두 문자열을 결합해서 출력 |
CONCAT('A','B') -> AB |
SUBSTR(column|expression, m [, n]) |
주어진 문자에서 특정 문자만 추출 |
SUBSTR('ABC' , 1, 2) -> AB |
SUBSTRB(column|expression, m [, n]) |
주어진 문자에서 특정 바이트만 추출 |
SUBSTRB('한글', 1 ,2) -> 한 |
LENGTH(column|expression) |
입력된 문자열의 길이 값을 출력 |
LENGTH('한글') -> 2 |
LENGTHB(column|expression) |
입력된 문자열의 바이트 값을 출력 |
LENGTH('한글') -> 4 |
INSTR(column|expression, 'string', [,m], [n]) |
주어진 문자에서 특정 문자의 위치 추출 |
INSTR('A#B','#') -> 2 |
INSTRB(column|expression, 'string', [,m], [n]) |
주어진 문자에서 특정 문자 위치 바이트 추출 |
INSTRB('A*B','*') -> 2 |
LPAD(column|expression, n, 'string') |
주어진 문자열에서 왼쪽으로 특정문자 채움 |
LPAD('abcd', 6, '*') -> **abcd |
RPAD(column|expression, n, 'string') |
주어진 문자열에서 오른쪽에 특정문자 채움 |
RPAD('ABCD', 7, '#') -> ABCD### |
LTRIM(leading|trailing|both, ltrim_character FROM ltrim_source) |
주어진 문자열에서 왼쪽의 특정문자 삭제 |
LTRIM('*abc', '*') -> abc |
RTRIM(leading|trailing|both, rtrim_character FROM rtrim_source) |
주어진 문자열에서 오른쪽의 특정문자 삭제 |
RTRIMG('ABC*', '*') -> ABC |
REPLACE(text, search_string, replacement_string) |
주어진 문자열에서 A를 B로 치환함 |
REPLACE('AB', 'A', 'E') -> EB |
이렇게 됩니다. 이후에 정규식을 이용하기 위한 함수도 있지만 우선 문자 함수에서는 여기까지만 하고 정규식은 마지막에 추가하거나 다음 포스트에서 하도록 하겠습니다.
이제 전체적인 것들을 살펴보았으니 자세히 Oracle을 키고 예들고 보면서 하겠습니다 ㅎ
Case-Manipulation Function은 어떤게 있다고했죵? LOWER, UPPER, INITCAP 이렇게 세개라고 했습니다. 한번 해보죠 ㅎ
한꺼번에 비교를 해봤습니다. 귀찮아서..는 아닙니다 ㅎㅎ 지금 emp 테이블의 ename을 가지고 세가지 함수로 비교해 봤는데요.
어떤가요?ㅎ 한눈에 들어오시나요? LOWER는 소문자로 UPPER는 대문자로 INITCAP은 맨앞글자만 대문자로! 신기방기하죠 ㅎ
중요한건 이걸 어디에 쓸 수 있을까 하는 것에 대한 의문이 남아야죠. 함수가 있으면 뭐합니까? 쓸데가 있어야죠 ㅎ
이런것들은 어디에 쓸수 있을까요? 회원가입 같은거? 소문자로 입력하라고 했는데 삐뚤어진 사람이 대문자로 쓸수도 있죠. 그런거를 소문자로 바꿔주는 센스같은!? 아니면 INITCAP 같은 경우에는 영문이를 쓸때 첫글자만 대문자로 바꾸는 경우가 많으니 그럴때도?ㅎ
함수를 쓸때에는 어디에 어떻게 쓸지도 생각하면 더욱더욱 좋겠죠 ㅎ
이것이 바로 SQL의 매력이랄까..ㅎ 대단한 매력인거 같아요 ㅋ.ㅋ 다음것도 한번 보죠!
한번에 Case-Manipulation Function을 끝냈으니 Character-Manipulation Function을 봐야겠죠!
그 첫번째는! CONCAT! 연결시켜주는 것이라고 했습니다.
CONCAT(column1|expression1, column2|expression2)
요것이 바로 문법 ㅎ 문법을 봤으니 어찌 쓰는지도 봐야겠죠? CONCAT은 이미 우리가 한번 써봤어요.
언제? 연산자 할때 || 요렇게 생긴게 있었죠? 연결연산자 합성연산자라고 부르는 이것!과 같은 역할이에요
이런 그림 어디서 봤다구요? 연산자에서 봤다구요 ㅎ 못보셨다구요? 제대로 안보신거에요 이런..ㅎ
돌아가서 한번 다시 보시고 오세요 ㅎ 대충대충넘어가면 실력이 절대절대절대 늘지 않을거에요.. 확실함다 ㅎㅎ
SELECT name||position FROM professor; 와 같은 결과물임을 다시 한번 알려드리면서~ㅎ 다음!
SUBSTR입니다. SUBSTR는 딱봐도 많이 쓰게 생긴 아이에요. 주어진 문자에서 특정 문자만 추출 하기때문에 용이하죠.
SUBSTR(column|expression, m [, n])
이렇게 두가지를 예를들어서 한번 보겠습니다. SUBSTR에는 두가지 숫자가 들어갑니다. 처음 기준점을 잡는 숫자와 진행될 숫자.
처음 기준으로 잡는 숫자도 바이트로 계산하기 때문에 잘 해주어야 합니다. 지금은 첫번째를 기준으로 2개를 해서 위처럼 나오지만
예를들어 SUBSTRB(name, 2, 2) 라고 하면 아무런 것도 출력되지 않습니다. 한글이 2바이트인데 끝이 나는 3바이트부터 시작하지 않고 2바이트를 기준으로 잡으면 한글의 반이 어떻게 나오겠습니까? 그래서 아무런 값도 출력되지 않습니다. 그러므로 SUBSTRB(name, 3, 2) 라고 하면 정상적으로 두번째 글자가 출력이 되는 것을 볼 수 있습니다.
저도 직접해보고서 말하는거에요 ㅎ 헷갈릴땐 무조건 실습실습! 실습만이 살길입니다 ㅎㅎ 여러가지 방면으로 해보는게 좋아요 ㅎ
이제 중요한 SUBSTR를 넘어서서 LENGTH, LENGTHB를 설명하겠습니다. 이름에서부터 파바박 오죠?ㅎ 길이 ㅎㅎ
LENGTH(column|expression)
'Oracle > Oracle SQL' 카테고리의 다른 글
Database SQL_Sigle-Row Runction_숫자&날짜함수 (0) | 2015.03.31 |
---|---|
Database SQL_Single-Row Function_정규식 (0) | 2015.03.30 |
Database SQL_Select_연산자&조건부 (0) | 2015.03.30 |
Database SQL_Select_문법&익숙해지기 (0) | 2015.03.30 |
Oracle SQL_Select_계정잠금해제&sql 불러오기 (0) | 2015.03.30 |