/**
* CASE
* WHEN
* END
*/
String queryA = "select" +
" case when m.age <= 20 then '청소년'" +
" when m.age <= 25 then '청년'" +
" else '성인'" +
" end" +
" from Member m";
List<String> resultListA = em.createQuery(queryA, String.class)
.getResultList();
for (String s : resultListA) {
System.out.println("s.case = " + s);
}
나이가 20이하면 청소년, 20초과 25이하면 청년, 그리고 25초과면 성인
결과:
s.case = 청소년
s.case = 청소년
s.case = 청소년
s.case = 청소년
s.case = 청소년
s.case = 청소년
s.case = 청년
s.case = 청년
s.case = 청년
s.case = 청년
s.case = 청년
s.case = 성인
s.case = 성인
s.case = 성인
s.case = 성인
s.case = 성인
기본 Case식:
select
case when m.age <= 10 then '학생요금'
when m.age >= 60 then '경로요금'
else '일반요금'
end
from Member m
단순 Case식:
select
case t.name
when 'TeamA' then '110%'
when 'TeamB' then '120%'
else '105%'
end
from Team t
String queryB = "select coalesce(m.username, '이름 미입력') from Member m";
List<String> resultListB = em.createQuery(queryB, String.class)
.getResultList();
사용자 이름이 없으면(NULL) '이름 미입력' 반환
결과:
s.coalesce = 이름 미입력
s.coalesce = member6
s.coalesce = 이름 미입력
s.coalesce = 이름 미입력
s.coalesce = member9
s.coalesce = 이름 미입력
s.coalesce = 이름 미입력
s.coalesce = member12
s.coalesce = 이름 미입력
s.coalesce = 이름 미입력
s.coalesce = member15
s.coalesce = 이름 미입력
s.coalesce = 이름 미입력
s.coalesce = member18
s.coalesce = 이름 미입력
s.coalesce = 이름 미입력
String queryC = "select NULLIF(m.age, :age) from Member m";
List<Integer> resultListC = em.createQuery(queryC, Integer.class)
.setParameter("age", 20)
.getResultList();
나이가 20이면 null을 반환하고, 그 외에는 본인의 나이를 반환
결과
s.nullif = 15
s.nullif = 16
s.nullif = 17
s.nullif = 18
s.nullif = 19
s.nullif = null
s.nullif = 21
s.nullif = 22
s.nullif = 23
s.nullif = 24
s.nullif = 25
s.nullif = 26
s.nullif = 27
s.nullif = 28
s.nullif = 29
s.nullif = 30