简介:
SQL中条件判断表达式有 case when then end
,if()
和 ifnull()
case有两种格式,即 简单case函数 和 case搜索函数。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。
简单的case函数
SELECT 姓名,
(CASE 性别
WHEN "男" THEN 1
WHEN "女" THEN 0
END
)性别
FROM 教师表;
case选择函数
SELECT 姓名,
(CASE
WHEN 性别 = "男" THEN 1
WHEN 性别 = "女" THEN 0
END
)性别
FROM 教师表;
if函数
if(expre1, expre2, expre3)
如果expre1为true (expre1 <> 0 and expre1 <> null),则返回expre2,否则返回expre3
SELECT 姓名,
IF(性别 = "男", 1, 0)性别
FROM 教师表
WHERE 性别 <> '';
ifnull函数
ifnull(expre1, expre2)
如果expre1为 null 就返回expre2,不为 null 就返回 expre1 (0和''不行,只能是null)
SELECT IFNULL(NULL, 10); #10
SELECT IFNULL(0, 10); #0
SELECT IFNULL('', 10); #10
SELECT IFNULL(6/0, 'hello'); #'hello'
小试牛刀
根据教师的生日查询他们的生肖
首先试试case函数
#简单case函数
SELECT 姓名, 生日,
(CASE YEAR(生日) MOD 12
WHEN 0 THEN "猴"
WHEN 1 THEN "鸡"
WHEN 2 THEN "狗"
WHEN 3 THEN "猪"
WHEN 4 THEN "鼠"
WHEN 5 THEN "牛"
WHEN 6 THEN "虎"
WHEN 7 THEN "兔"
WHEN 8 THEN "龙"
WHEN 9 THEN "蛇"
WHEN 10 THEN "马"
WHEN 11 THEN "羊"
END)生肖
FROM 教师表;
成功了!
再试一试case搜索函数
/* case搜索函数 */
SELECT 姓名, 生日,
(CASE
WHEN YEAR(生日) MOD 12 = 0 THEN "猴"
WHEN YEAR(生日) MOD 12 = 1 THEN "鸡"
WHEN YEAR(生日) MOD 12 = 2 THEN "狗"
WHEN YEAR(生日) MOD 12 = 3 THEN "猪"
WHEN YEAR(生日) MOD 12 = 4 THEN "鼠"
WHEN YEAR(生日) MOD 12 = 5 THEN "牛"
WHEN YEAR(生日) MOD 12 = 6 THEN "虎"
WHEN YEAR(生日) MOD 12 = 7 THEN "兔"
WHEN YEAR(生日) MOD 12 = 8 THEN "龙"
WHEN YEAR(生日) MOD 12 = 9 THEN "蛇"
WHEN YEAR(生日) MOD 12 = 10 THEN "马"
WHEN YEAR(生日) MOD 12 = 11 THEN "羊"
END)生肖
FROM 教师表;
那在试试if函数
-- if函数
SELECT 姓名, 生日,
IF(YEAR(生日) MOD 12 = 0, "猴",
IF(YEAR(生日) MOD 12 = 1, "鸡",
IF(YEAR(生日) MOD 12 = 2, "狗",
IF(YEAR(生日) MOD 12 = 3, "猪",
IF(YEAR(生日) MOD 12 = 4, "鼠",
IF(YEAR(生日) MOD 12 = 5, "牛",
IF(YEAR(生日) MOD 12 = 6, "虎",
IF(YEAR(生日) MOD 12 = 7, "兔",
IF(YEAR(生日) MOD 12 = 8, "龙",
IF(YEAR(生日) MOD 12 = 9, "蛇",
IF(YEAR(生日) MOD 12 = 10, "马", "羊"
)))))))))))生肖
FROM 教师表;