当前位置: 首页 > article >正文

MySQL 中常用函数使用

IF()

IF函数根据判断条件是否成立进行选择执行,成立时执行一条语句,不成立时执行另一条语句

语法结构:

IF(condition, value_if_true, value_if_false)

参数说明

  • condition: 判断条件
  • value_if_true: 如果 condition 的结果为 TRUE,返回该值
  • value_if_false: 如果 condition 的结果为 FALSE,返回该值

举例:

SELECT id, name,
       IF(age<18,'未成年','成年') AS '是否成年'
FROM student;

IFNULL()

IFNULL(expr1,expr2),如果 expr1 的值为 null,则返回 expr2 的值,如果 expr1 的值不为null,则返回 expr1 的值。

SELECT   IFNULL(1,0);  -- 输出结果:1   
SELECT   IFNULL(NULL,10); -- 输出结果:10   
SELECT   IFNULL(1/0,10);  -- 输出结果:10   
SELECT   IFNULL(1/0,'yes'); -- 输出结果:'yes' 
SELECT   IFNULL(NULL,'B');    -- 输出结果:B
SELECT   IFNULL('Hello','B'); -- 输出结果:Hello

NULLIF()

NULLIF(expr1,expr2),如果 expr1=expr2 成立,那么返回值为 null,否则返回值为 expr1 的值。

SELECT NULLIF('A','A');     -- 输出结果:null
SELECT NULLIF('A','B');     -- 输出结果:A

ISNULL()

ISNULL(expr),如果 expr 的值为 null,则返回 1,如果 expr1 的值不为 null,则返回 0。

SELECT ISNULL(NULL);        -- 输出结果:1
SELECT ISNULL('HELLO');     -- 输出结果:0

CASE

CASE表示函数开始,END表示函数结束。如果 expr1 成立,则返回 value1,如果 expr2 成立,则返回value2,当全部不成立则返回 valueN,而当有一个成立之后,后面的就不执行了。

SELECT CASE 
  WHEN 1 > 0
  THEN '1 > 0'
  WHEN 2 > 0
  THEN '2 > 0'
  ELSE '3 > 0'
  END
#输出结果:1 > 0

如果表达式 expr 的值等于 e1,返回 value1;如果等于 e2,则返回 value2。否则返回 valueN。

SELECT CASE xfflag 
  WHEN 1 THEN '结算账目'
  WHEN 2 THEN '消费账目'
ELSE '类型不对'

UPSERT 

INSERT INTO … ON DUPLICATE KEY UPDATE 是 MySQL 中一种用于插入数据并处理重复键冲突的语法。

这个语法适用于在 insert 的时候,如果 insert 的数据会引起唯一索引(包括主键索引)的冲突,即唯一值重复了,则不会执行 insert 操作,而执行后面的 update 操作,使用给定的新值来更新冲突行中的列。

一般 Update子句可以使用 VALUES(col_name) 获取 insert 部分的值。也是项目中使用最多的方式。

注意:VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。

INSERT INTO student(Sno, Sname, Ssex, Sage, Sdept)
VALUES("201215121", "李勇", "男", 30, "CS")
on DUPLICATE key UPDATE Sage=values(Sage);
mysql> select * from student;
+-----------+--------+------+------+-------+
| Sno       | Sname  | Ssex | Sage | Sdept |
+-----------+--------+------+------+-------+
| 201215121 | 李勇   | 男   |   18 | CS    |
| 201215122 | 刘晨   | 女   |   19 | CS    |
| 201215123 | 王敏   | 女   |   18 | MA    |
| 201215125 | 张立   | 男   |   19 | IS    |
+-----------+--------+------+------+-------+
4 rows in set (0.00 sec)

mysql> INSERT INTO student(Sno, Sname, Ssex, Sage, Sdept)
    -> VALUES("201215121", "李勇", "男", 30, "CS")
    -> on DUPLICATE key UPDATE Sage=values(Sage);
Query OK, 2 rows affected (0.01 sec)

mysql> select * from student;
+-----------+--------+------+------+-------+
| Sno       | Sname  | Ssex | Sage | Sdept |
+-----------+--------+------+------+-------+
| 201215121 | 李勇   | 男   |   30 | CS    |
| 201215122 | 刘晨   | 女   |   19 | CS    |
| 201215123 | 王敏   | 女   |   18 | MA    |
| 201215125 | 张立   | 男   |   19 | IS    |
+-----------+--------+------+------+-------+
4 rows in set (0.00 sec)


http://www.kler.cn/a/308804.html

相关文章:

  • Suricata
  • ubuntu22.04 安装FFmpeg,并进行视频的转化格式和裁剪
  • 基于微信小程序的公务员考试学习平台的设计与实现,LW+源码+讲解
  • C#语言详解:从基础到进阶
  • 【AI构思渲染】网络直播——建筑绘图大模型生成渲染图
  • ⾃动化运维利器Ansible-基础
  • 自动化任务的错误处理:编写健壮的自动化脚本,处理Office应用中的错误和异常情况
  • 成型的程序
  • Java设计模式—面向对象设计原则(三) -----> 依赖倒转原则DIP(完整详解,附有代码+案例)
  • 望繁信科技携流程智能解决方案亮相CNDS 2024新能源产业数智峰会
  • TI DSP TMS320F280025 Note11:F280025时钟系统
  • React项目中使用发布订阅模式
  • 10_Python流程控制_循环
  • Python中的策略模式:解锁编程的灵活之钥
  • 4. Python之运算符
  • 创新的真相:重新定义旧问题,而不是追逐新的问题
  • SEAFARING靶场渗透
  • # 深度学习笔记(6)Hugginface -Transformer
  • 重生之我在Java世界------学单例设计模式
  • [使用ElasticsearchEmbeddingsCache实现高效存储和检索:完整指南]
  • 滑坡落石检测数据集
  • [掌握API速率限制:如何高效管理请求频率]
  • HarmonyOS开发实战( Beta5.0)橡皮擦案例实践详解
  • 蓝桥杯-STM32G431RBT6(UART解析字符串sscanf和解决串口BUG)
  • 【Java EE】文件IO
  • java线程池编程示例