首页/数据/SQL 速查/IF() 条件函数(MySQL)与跨库写法
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条
函数速查60 条
变更与事务52 条性能与执行计划72 条

IF() 条件函数(MySQL)与跨库写法

MySQL 的 IF(cond, a, b) 是函数式三元表达式,能直接写在 SELECT 里;PostgreSQL 没有该表达式,统一用 CASE WHEN。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
SELECT IF(qty > 0, 'in_stock', 'sold_out') AS state FROM products;
SELECT IFNULL(NULLIF(city, ''), '未知') FROM users;

PostgreSQL

PostgreSQL
SELECT CASE WHEN qty > 0 THEN 'in_stock' ELSE 'sold_out' END AS state
FROM products;
MySQLIF(expr, then, else),可嵌套
PostgreSQL表达式位置只能用 CASE;IF 只存在于 plpgsql 存储过程语言里
标准写法CASE WHEN … THEN … ELSE … END 两库通用

易错点

  • 把 MySQL 的 IF() 直接搬到 PostgreSQL 会报语法错误,脚本跨库前先替换为 CASE
  • IF 嵌套三层以上可读性骤降,复杂分支改为 CASE 或多写一列派生标记

数据来源与参考

  • MySQL 8.0 Reference Manual · Flow Control Functions
  • PostgreSQL Documentation · Conditional Expressions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌