MySQL 【流程控制】函数

目录

[1、CASE 语句用于流程控制中的多分支情况。](#1、CASE 语句用于流程控制中的多分支情况。)

[2、IF() 函数根据测试条件是否为真分别返回指定的值。](#2、IF() 函数根据测试条件是否为真分别返回指定的值。)

[3、IFNULL() 函数,如果第一个参数为 NULL,返回第二个参数,否则返回第一个参数。](#3、IFNULL() 函数,如果第一个参数为 NULL,返回第二个参数,否则返回第一个参数。)

[4、NULLIF() 函数根据两个参数是否相等决定返回 NULL 还是第一个参数。](#4、NULLIF() 函数根据两个参数是否相等决定返回 NULL 还是第一个参数。)


1、CASE 语句用于流程控制中的多分支情况。

语法:

**CASE value
WHEN compare_value THEN result

WHEN compare_value THEN result ...

ELSE result

END**

或者:

**CASE
WHEN condition THEN result

WHEN condition THEN result ...

ELSE result

END**

返回值:

CASE 语句返回 condition 为真或者 value = compare_value 为真的 THEN 子句中指定的值。

sql 复制代码
SELECT
    weekday_index AS `Weekday Index`,
    CASE weekday_index
        WHEN 0 THEN 'Monday'
        WHEN 1 THEN 'Tuesday'
        WHEN 2 THEN 'Wednesday'
        WHEN 3 THEN 'Thursday'
        WHEN 4 THEN 'Friday'
        WHEN 5 THEN 'Saturday'
        WHEN 6 THEN 'Sunday'
        ELSE 'Error'
    END AS `Weekday Name`
FROM
    test_case_weekday;


+---------------+--------------+
| Weekday Index | Weekday Name |
+---------------+--------------+
|             0 | Monday       |
|             1 | Tuesday      |
|             2 | Wednesday    |
|             3 | Thursday     |
|             4 | Friday       |
|             5 | Saturday     |
|             6 | Sunday       |
+---------------+--------------+
sql 复制代码
SELECT
    weekday_index AS `Weekday Index`,
    CASE
        WHEN weekday_index = 0 THEN 'Monday'
        WHEN weekday_index = 1 THEN 'Tuesday'
        WHEN weekday_index = 2 THEN 'Wednesday'
        WHEN weekday_index = 3 THEN 'Thursday'
        WHEN weekday_index = 4 THEN 'Friday'
        WHEN weekday_index = 5 THEN 'Saturday'
        WHEN weekday_index = 6 THEN 'Sunday'
        ELSE 'Error'
    END AS `Weekday Name`
FROM
    test_case_weekday;

2、IF() 函数根据测试条件是否为真分别返回指定的值。

语法:

IF(condition, expr_if_true, expr_if_false)

*condition:*测试条件表达式。

expr_if_true: 如果 conditionTRUE 返回此值。

expr_if_false: 如果 conditionFALSE 返回此值。

sql 复制代码
SELECT IF(1 > 2, 'NO', 'YES'), IF(2 > 1, 'NO', 'YES');


+------------------------+------------------------+
| IF(1 > 2, 'NO', 'YES') | IF(2 > 1, 'NO', 'YES') |
+------------------------+------------------------+
| YES                    | NO                     |
+------------------------+------------------------+

3、IFNULL() 函数,如果第一个参数为 NULL,返回第二个参数,否则返回第一个参数。

语法:

IFNULL(expr1, expr2)

expr1: 判断此表达式是否为 NULL

expr2:expr1NULL 时,返回 expr2

如果 expr1NULLIFNULL() 函数返回 expr1,否则返回 expr2

sql 复制代码
SELECT
    IFNULL(NULL, 'It is NULL'),
    IFNULL('I am not NULL', 'I am NULL');


+----------------------------+--------------------------------------+
| IFNULL(NULL, 'It is NULL') | IFNULL('I am not NULL', 'I am NULL') |
+----------------------------+--------------------------------------+
| It is NULL                 | I am not NULL                        |
+----------------------------+--------------------------------------+

4、NULLIF() 函数根据两个参数是否相等决定返回 NULL 还是第一个参数。

NULLIF(expr1, expr2)

*expr1:*一个值或者表达式。

*expr2:*另一个值或者表达式。

如果 expr1 = expr2NULLIF() 函数返回 NULL,否则返回 expr1

sql 复制代码
SELECT
    NULLIF(1, 1),
    NULLIF(1, 2);


+--------------+--------------+
| NULLIF(1, 1) | NULLIF(1, 2) |
+--------------+--------------+
|         NULL |            1 |
+--------------+--------------+
相关推荐
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
爱可生开源社区5 天前
MySQL 性能优化:真正重要的变量
数据库·mysql
小马爱打代码5 天前
MySQL性能优化核心:InnoDB Buffer Pool 详解
数据库·mysql·性能优化
风流 少年5 天前
mysql mcp
数据库·mysql·adb
西门吹雪分身5 天前
mysql之数据离线迁移
数据库·mysql
轩情吖5 天前
MySQL初识
android·数据库·sql·mysql·adb·存储引擎