[DB] 3. SELECT 단일행 함수

김주희's avatar
Feb 26, 2025
[DB] 3. SELECT 단일행 함수

1. 단일행 함수

-- SELECT 단일행 함수 -- 1. 날짜/시간 -- from dual 생략 select now(); select ename, hiredate, now() from emp; -- varchar 문자열 타입 select '2025-02-25'; -- date 타입으로 변경 select date('2025-02-25 12:30:35'); -- time만 출력 select time('2025-02-25 12:30:35'); select year('2025-02-25 12:30:35'); select month('2025-02-25 12:30:35'); select day('2025-02-25 12:30:35'); select hour('2025-02-25 12:30:35'); select minute('2025-02-25 12:30:35'); select second('2025-02-25 12:30:35'); -- 2. 날짜 포맷 -- Y(키워드)는 대문자 m, d는 소문자 (Minute도 있어서 month는 소문자로 씀) select date_format(now(), '%Y/%m/%d-%h:%i:%s'); -- 3. 날짜 연산하기 (더하기, 빼기, 간격, 마지막 날짜) select date_add(now(), interval 4 year); select date_add(now(), interval 4 MONTH); select date_add(now(), interval 4 WEEK); select date_add(now(), interval 4 day); select date_add(now(), interval 4 hour); select date_add(now(), interval 4 minute); select date_add(now(), interval 4 second); select date_sub('2025-02-25', interval 4 day); select datediff('2025-02-25','2025-03-01'); select timediff(now(), '2025-02-25 12:50:00'); select last_day(now()); -- 4. 수학 함수 (ABS, CEIL, FLOOR, ROUND, RAND, mod 등...) select floor(101.5); select ceil(101.5); select round(101.5); select mod(101,10); -- 5. 문자열 함수 -- substr(문자열,시작번지1~,길이) select substr(hiredate, 1, 4) from emp; select year(hiredate) from emp; -- replace(문자열, 기존의 바꾸고자 하는 문자열, 치환하고자 하는 문자열) select replace("010/2222/7777", "/", "-"); -- instr: 문자열에서 찾는 문자열이 있으면 시작 번지, 없으면 0 select instr("abcde", "c"); -- rpad(원본문자열 , 원하는 자리수, 채울 문자열): 오른쪽에 특정문자를 원하는 자리수만큼 채워서 반환 select rpad('ssarmango',10, '*'); select rpad(substr('ssarmango',1,4), LENGTH('ssarmango'), '*'); -- lpad select lpad(substr('ssarmango',1,4), LENGTH("ssarmango"), '*');
 
 

6. 문제 풀기

-- 6. 문제 풀기 select name, replace(tel,'381','***') from student; -- (1). )와 -위치 찾기 select name, tel, instr(tel,")"), instr(tel,"-") from student; -- (2). )와 - 사이 문자열 추출 select name, tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ) as '치환할 부분' from student; -- (3). 기존 문자열 -> *** select name, tel, replace(tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ),repeat("*", instr(tel,"-")-instr(tel,")") - 1 )) as 'telephone' from student;
notion image
 

2. 날짜 포맷

형식
설명
예시 (2025-02-25 14:30:45)
%Y
4자리 연도
2025
%y
2자리 연도
25
%m
2자리 월(01~12)
02
%c
월 별 이름을 0 ~12 로
2
%d
2자리 일(01~31)
25
%e
일(1, 19)
25
%H
24시간제 시간(00~23)
14
%h or %I
12시간제 시간(01~12)
02
%i
분(00~59)
30
%s or %S
초(00~59)
45
%p
AM/PM
PM
%M
월 이름 (January~December)
February
%b or %h
월 이름 약어 (Jan~Dec)
Feb
%W
요일 이름 (Sunday~Saturday)
Tuesday
%a
요일 약어 (Sun~Sat)
Tue
%w
요일 숫자 (0=일요일, 6=토요일)
2
%j
연도 기준 몇 번째 날(001~366)
056
%U
연 기준 주(일요일 시작, 00~53)
08
%u
연 기준 주(월요일 시작, 00~53)
08
 
 

3. 조건문

-- 조건문(if - mysql, case when - 모든 DB) select if(10>5, "참", "거짓");
notion image
 
-- 2500 (고액연봉), (일반연봉) select ename, sal, case when sal > 2500 then "고액연봉" when sal < 2000 then "일반연봉" else "중간연봉" end "연봉그룹" from emp;
notion image
 

4. 정렬

select * from emp where deptno = 20 order by sal asc;
notion image
 
order by 칼럼1, 칼럼2
: 칼럼1 기준으로 정렬 후 동일한 값을 가지는 인스턴스에 대해서 다시 칼럼2 기준으로 정렬
-- 같은 sal 중에서는 이름 순서로 두 번 정렬 select * from emp where deptno = 20 order by sal desc, ename asc;
notion image
 
-- 같은 이름이 없으므로 그냥 이름 순서로 정렬된 것과 같다. select * from emp where deptno = 20 order by ename asc, sal desc;
notion image
 

전체 코드

-- SELECT 단일행 함수 -- 1. 날짜/시간 -- from dual 생략 select now(); select ename, hiredate, now() from emp; -- varchar 문자열 타입 select '2025-02-25'; -- date 타입으로 변경 select date('2025-02-25 12:30:35'); -- time만 출력 select time('2025-02-25 12:30:35'); select year('2025-02-25 12:30:35'); select month('2025-02-25 12:30:35'); select day('2025-02-25 12:30:35'); select hour('2025-02-25 12:30:35'); select minute('2025-02-25 12:30:35'); select second('2025-02-25 12:30:35'); -- 2. 날짜 포맷 -- Y(키워드)는 대문자 m, d는 소문자 (Minute도 있어서 month는 소문자로 씀) select date_format(now(), '%Y/%m/%d-%h:%i:%s'); -- 3. 날짜 연산하기 (더하기, 빼기, 간격, 마지막 날짜) select date_add(now(), interval 4 year); select date_add(now(), interval 4 MONTH); select date_add(now(), interval 4 WEEK); select date_add(now(), interval 4 day); select date_add(now(), interval 4 hour); select date_add(now(), interval 4 minute); select date_add(now(), interval 4 second); select date_sub('2025-02-25', interval 4 day); select datediff('2025-02-25','2025-03-01'); select timediff(now(), '2025-02-25 12:50:00'); select last_day(now()); -- 4. 수학 함수 (ABS, CEIL, FLOOR, ROUND, RAND, mod 등...) select floor(101.5); select ceil(101.5); select round(101.5); select mod(101,10); -- 5. 문자열 함수 -- substr(문자열,시작번지1~,길이) select substr(hiredate, 1, 4) from emp; select year(hiredate) from emp; -- replace(문자열, 기존의 바꾸고자 하는 문자열, 치환하고자 하는 문자열) select replace("010/2222/7777", "/", "-"); -- instr: 문자열에서 찾는 문자열이 있으면 시작 번지, 없으면 0 select instr("abcde", "c"); -- rpad(원본문자열 , 원하는 자리수, 채울 문자열): 오른쪽에 특정문자를 원하는 자리수만큼 채워서 반환 select rpad('ssarmango',10, '*'); select rpad(substr('ssarmango',1,4), LENGTH('ssarmango'), '*'); -- lpad select lpad(substr('ssarmango',1,4), LENGTH("ssarmango"), '*'); -- 6. 문제 풀기 select name, replace(tel,'381','***') from student; -- (1). )와 -위치 찾기 select name, tel, instr(tel,")"), instr(tel,"-") from student; -- (2). )와 - 사이 문자열 추출 select name, tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ) as '치환할 부분' from student; -- (3). 기존 문자열 -> *** select name, tel, replace(tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ),repeat("*", instr(tel,"-")-instr(tel,")") - 1 )) as 'telephone' from student; -- 조건문(if - mysql, case when - 모든 DB) select if(10>5, "참", "거짓"); -- 2500 (고액연봉), (일반연봉) select ename, sal, case when sal > 2500 then "고액연봉" when sal < 2000 then "일반연봉" else "중간연봉" end "연봉그룹" from emp;
Share article

jay0628