안녕하세요 이승혁입니다.
지난 실습에서 sql developer를 설치해 보다 간편하게 실습을 진행할 수 있게 되었습니다.
이번 시간은 단일행 함수 중 문자 함수, 숫자 함수, 날짜 함수 , 변환 함수에 대해 실습을 진행해 보도록 하겠습니다.
지난 시간에 했던 문자함수로는 소문자를 대문자로 변경해주는 upper , 대문자를 소문자로 변경해주는 lower,
문자의 첫 글자만 대문자로 바꾸어주는 initcap , 문자의 일부분을 잘라내는 substr, 문자의 위치를 알려주는 instr 함수를 사용해 보았습니다.
오늘은 문자함수 length, lpad&rpad, rtrim&trim, replace, concat
숫자 함수 round, trunc, mod, power에 대한 실습을 진행해 보도록 하겠습니다.
ㆍ 단일행 함수 - 문자함수 length
문자의 길이를 출력하는 함수입니다.
select ename,length(ename)
from emp;
실습 1. lenth 함수와 order 절 사용해보기, 이메일 길이가 긴 순서대로 정렬해 출력해보기
select ename,email, length(email) as len
from emp11
order by len desc;
※ select 절의 칼럼별칭 len을 order절에서 사용할 수 있는 이유
테이블 -> 조건 -> 칼럼 -> 정렬
오라클 내부 순서 from -> where -> select -> order 덕분에 select 절에서 사용한 칼럼 별칭을 order 절에서 사용할 수 있다.
ㆍ 단일행 함수 - 문자함수 lpad&rpad
막대 그래프처럼 데이터를 간단하게 시각화할 수 있는 함수로 특정 칸의 개수를 정하고 빈칸을 채울 수 있다.
pad(사용할 데이터, 칸 개수, 채울 문자) 형식으로 사용합니다.
lpad : 좌측을 채운다.
rpad : 우측을 채운다.
이해하기 가장 쉬운 방법은 실습입니다.
실습 2. rpad 사용해보기, 월급 칸을 10으로 잡고 남는 칸을 우측 기준으로 별모양(*)으로 채워 출력해보기
select ename,rpad(sal,10,'*') as salary
from emp;
sal(SALARY) 칼럼의 총 칸을 10칸으로 지정했습니다.
rpad 함수를 사용했기 때문에 우측을 빈칸으로 인식하여 채웁니다.
1번 행의 경우 5000이라는 값은 4칸을 사용 따라서 지정한 10칸 중 나머지 6칸을 *모양으로 우측으로 채웁니다.
위 함수를 사용하면 보다 쉽게 크기 비교를 할 수 있는데 다음과 같은 실습을 통해 확인해보겠습니다.
실습 3.
1. 월급이 높은 사람부터 낮은 사람 순서로 정렬하여 출력
2. 막대 그래프 형식으로 한눈에 확인할 수 있도록 출력
보다 깔끔하고 숫자로 나타낸 것보다 보기 편하게 나타낼 수 있습니다.
코드는 다음과 같습니다.
select ename, lpad('■',sal/100,'■') as salary
from emp
order by salary desc;
pad함수의 변수 사용은 pad(사용할 데이터, 칸 개수, 채울 문자)라고 했습니다.
첫 행 KING을 예시로 설명하겠습니다.
우선 사용할 데이터는 첫 실습처럼 해당 직원의 월급의 숫자가 아닌, 막대그래프 이므로 '■' 문자를 사용했습니다.
칸의 개수는 해당 직원의 월급을 특정 숫자(예시의 100)로 나누어 지정합니다.
위 과정에서 각 직원들의 월급이 전체 칸의 개수로 나타내어집니다. ( 5000인 직원은 50칸, 3000인 직원은 30칸 )
이제 채우는 일만 남았는데 사용할 데이터는 '■' 한 개로 지정해 두었습니다. 따라서 한 개의 네모를 제외한 나머지를 모두 '■' 문자로 채우게 됩니다.
다음 예시를 보면 조금 더 쉽게 이해할 수 있습니다.
채울 문자를 빈 네모로 바꾸어 보았습니다.
첫번째 변수인 '■' 하나를 가장 우측에 채우고 나머지 좌측을 '□' 문자로 채우는 것을 확인했습니다.
pad 함수의 변수와 작동에 대한 원리를 이해하고 정리할 수 있었습니다.
ㆍ 단일행 함수 - 문자 함수 rtrim&trim<rim
trim 함수는 특정 철자 하나를 잘라낼 때 혹은 좌우 공백을 제거할 때 사용합니다.
trim('문자' from column명) , 문자를 쓰지 않은 경우 공백만 제거합니다.
여러개의 문자를 잘라낼 때 또는 좌 or 우 공백 제거할 때는 ltrim o rltrim을 사용합니다
ltrim or rtrim(column명,'문자''문자') : 여러 개를 자를 때는 쉼표 없이 이어서 사용합니다.
select ename, trim('S' from ename)
from emp;
실습 4. 이메일의 .com, .net 지워보기
select eamil,rtrim(eamil,'.com''.net') eamil
from emp11;
rtrim 함수를 사용해 우측부터 확인해 '.com' or '.net'이 아닌 문자를 만날 때까지 제거합니다.
trim과 마찬가지로 문자를 적지 않는 경우 rtrim은 우측공백을, ltrim은 좌측 공백만을 제거합니다.
ㆍ 단일행 함수 - 문자함수 replace
특정 문자를 다른 문자로 대체하는 함수
replace(데이터,바꿀문자,대체문자) 의 형식을 사용합니다.
select ename, replace(sal, 0, '*')
from emp;
실습 5. 병원에서 사용하는 형태로 이름을 나타내보기, ex ) 이*혁
select replace(ename,substr(ename,-2,1),'*')
from emp11;
replace의 대체할 문자는 사람마다 이름이 다르기 때문에 특정 문자를 사용할 수 없습니다.
replace의 가운데 문자를 각 이름의 가운데 글자로 하기 위해 substr 함수로 이름의 가운데를 잘라냈습니다.
substr 함수의 문자위치 -2를 사용한 이유는 이름이 4글자인 사람들도 고려해야 하기 때문입니다.
-2를 사용함으로써 뒤에서부터 2번째 글자를 substr의 해당 문자로 사용할 수 있습니다.
ㆍ 단일행 함수 - 문자함수 concat
두 개의 컬럼의 데이터를 붙여서 출력하는 함수
실습 6. concat 사용해보기, 이름과 월급을 바로 붙여서 출력해보기
select concat(ename,sal)
from emp;
연결 연산자 || 를 사용해도 결과는 같습니다.
ㆍ 단일행 함수 - 숫자 함수 round
숫자를 반올림 해주는 함수입니다.
round(숫자 데이터, 반올림 위치)
반올림 위치는 1의 자리를 0을 기준으로 소수점 첫 번째 자리는 1 , 두 번째 자리는 2 순서로 사용하며
십의 자리는 반대로 -1을 사용합니다.
select '787.567', round( 787.567, -1) , -- 790
round( 787.567, 0) , -- 788
round( 787.567, 1) , -- 787.6
round( 787.567, 2) -- 787.57
from dual;
ㆍ 단일행 함수 - 숫자 함수 trunc
숫자를 버림 하는 함수입니다.
버림의 위치는 1의 자리를 0을 기준으로 소수점 첫 번째 자리는 1 , 두 번째 자리는 2 순서로 사용하며
십의 자리는 반대로 -1을 사용합니다.
select '787.567', trunc( 787.567, -1) , -- 780
trunc( 787.567, 0) , -- 787
trunc( 787.567, 1) , -- 787.5
trunc( 787.567, 2) -- 787.56
from dual;
ㆍ 단일행 함수 - 숫자 함수 mod
나머지 값을 출력하는 함수입니다.
mod(숫자 데이터, 나눌숫자) 형태로 사용합니다
select mod(10,3)
from dual;
실습 7. 나이가 짝수면 0 홀수면 1 출력해보기
select age,mod(age,2) as 짝홀수판별
from emp11;
이번 포스팅은 여기서 마치고 다음 포스팅에서는 날짜를 다루는 날짜 함수, 데이터의 유형 자체를 변경하는 변환 하는
변환 함수를 사용하여 SQL에서 날짜를 다룰 줄 알고, 데이터의 유형에 익숙해지는 시간을 갖도록 하겠습니다.
읽어주셔서 감사합니다
'프로그래밍 > SQL' 카테고리의 다른 글
SQL-10) 데이터 분석 함수 (0) | 2020.10.27 |
---|---|
SQL-9) group by, having , 함수(function) - 5 (0) | 2020.10.27 |
SQL-8) 함수(function) - 4 (2) | 2020.10.26 |
SQL-7) 함수(function) - 3 (0) | 2020.10.25 |
SQL-5) SQL Developer install (0) | 2020.10.23 |
SQL-4) Order 절, 함수(function) (0) | 2020.10.22 |
SQL-3) Query 조건절 (0) | 2020.10.20 |
SQL-2) Query (0) | 2020.10.19 |