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
但这只适用于 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')
我有一个引用多个表的长而复杂的表达式。表达式 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
但这只适用于 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')