MYSQL 5:返回表达式if语句为假,类似于NULLIF

MYSQL 5: Returning expression if statement is false, similar to NULLIF

我有一个引用多个表的长而复杂的表达式。表达式 return 是一个字符串,但如果 returned 字符串为空“”,我想 return 一个不同的字符串。

使用 IF 函数我必须将表达式写两次,例如:

IF(*expression* = "", "string not found", *expression*)

我知道 NULLIF 有一些接近我想要的东西:

NULLIF(*expression*, "")

如果我的表达式不为空,它会 return,但如果它是空的,它会 return NULL,而不是一个 costum 字符串。

有什么方法可以避免重复表达式,同时仍然能够选择自定义 return 字符串而不是空值,因为重复表达式(我的查询中有几个这样的例子)会使 view-quera 几乎不可读

您可以使用 :

SELECT IF(s.col = '', 'string not found', s.col)
FROM tab
,LATERAL (SELECT complex_expr AS col) s  -- LATERAL could be chained

db<>fiddle demo

但这只适用于 MySQL 8.0+。替代方法是 suqbquery:

SELECT IF(s.col = '', 'string not found', s.col)
FROM (SELECT complex_expr AS col
      FROM tab) s

如果您也可以转换 null 值,则可以混合使用 NULLIF()COALESCE():

COALESCE(NULLIF(expression, ''), 'string not found')