Case, then, else, end문에 대해서
- Case문은 프로그래밍 언어에서 스위치( switch ) 문과 비슷하지만 , 다수의 조건에 하나의 반환 값은 동작하지 않는다.
사용법
case
when 조건
then '반환 값'
when 조건
then '반환 값'
else 'when 조건에 해당 안되는 경우 반환값'
end
- when과 then은 한쌍이어야 한다.
- when과 then은 다수가 존재할 수 있다.
- else가 존재하면 모든 조건에 해당하지 않는 경우에 반환 값을 설정할 수 있다.
- else가 존재하지 않고, 조건에 맞지 않아서 반환 값이 없으면 null을 반환한다.
예제 쿼리
더보기
투표프로그램에서의 투표한 인원에 대한 테이블이다.
-- 투표프로그램 명세셔
drop table if exists TBL_VOTE_202005;
create table TBL_VOTE_202005(
V_JUMIN char(13) not null,
V_NAME varchar(20),
V_NO char(1),
V_TIME char(4),
V_AREA char(20),
V_CONFIRM char(1),
constraint TBL_VOTE_202005 primary key(V_JUMIN)
);
select * from TBL_VOTE_202005;
desc TBL_VOTE_202005;
insert into tbl_vote_202005 values ('99010110001', '김유권', '1', '0930', '제1투표장', 'N');
insert into tbl_vote_202005 values ('89010120002', '이유권', '2', '0930', '제1투표장', 'N');
insert into tbl_vote_202005 values ('69010110003', '박유권', '3', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('59010120004', '홍유권', '4', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('79010110005', '조유권', '5', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('89010120006', '최유권', '1', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('59010110007', '지유권', '1', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('49010120008', '장유권', '3', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('79010110009', '정유권', '3', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('89010120010', '강유권', '4', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('99010110011', '신유권', '5', '0930', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('79010120012', '오유권', '1', '1330', '제1투표장', 'Y');
insert into tbl_vote_202005 values ('69010110013', '현유권', '4', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('89010110014', '왕유권', '2', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('99010110015', '유유권', '3', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('79010110016', '한유권', '2', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('89010110017', '문유권', '4', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('99010110018', '양유권', '2', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('99010110019', '구유권', '4', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('79010110020', '황유권', '5', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('69010110021', '배유권', '3', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('79010110022', '전유권', '3', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('99010110023', '고유권', '1', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('59010110024', '권유권', '3', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('00010130024', '오유권', '3', '1330', '제2투표장', 'Y');
insert into tbl_vote_202005 values ('02010140024', '최유권', '3', '1330', '제2투표장', 'Y');
맨 앞 컬럼에 주민등록번호라고 치면, 옆에가 19 일지 , 00일지가 잘려서 삽입돼있다.
그렇다면 19 일지 , 20 일지는 7번째 숫자가 1,2이면 19일것이고 , 7번째숫자가 3,4이면 00일 것이다.
이런 경우에 자바의 if문같이 조건을 걸어서 그의 답변을 뽑아낼 수 있다.
쿼리 ( Query )
주민등록번호 앞자리를 뽑아내라 ( 양식 = XXXXXX )
년도만 출력하는 방법이다.
select concat(
-- 앞자리 만들기
case
when substr(v_jumin,7, 1) in('1','2') then '19'
when substr(v_jumin,7, 1) in('3','4') then '20'
end,
-- 년도 뒤 두자리
substr(v_jumin, 1,2),
'년',
-- 월 두 자리
substr(v_jumin, 3,2),
'월',
-- 일 두 자리
substr(v_jumin, 5,2),
'일생'
) as '생년월일'
from tbl_vote_202005;
1. substr ( 문자열 자르기 )
case문으로 조건을 주었는데
substr(v_jumin,7, 1)이란 문구는
v_jumin이라는 칼럼을 잘라내겠다는 뜻이다.
즉, substr(문자열, 시작위치, 길이) 문법으로 사용하니
v_jumin이라는 칼럼 문자열에서 7번째 숫자 1자리라는 뜻이고,
when then 문으로 조건이 (1,2) or (3,4)인지에 따라 그 값이 19나 20으로 출력되는 것이다.
앞이 정해졌으니 첫 번째에서 2자리까지 연도 뒤 두 자리,
3번째 자리부터 2자리는 월,
5번째 자리부터 2자리는 일으로 데이터를 뽑아낼 수 있다.
'MySQL > MySQL icia 30일차' 카테고리의 다른 글
MySQL index란? (0) | 2023.04.04 |
---|---|
MySQL VIEW( 뷰 )란? (0) | 2023.04.04 |
MySQL concat()에 대해서 (0) | 2023.04.04 |