Mysql函数转换非空值

Posted

技术标签:

【中文标题】Mysql函数转换非空值【英文标题】:Mysql function to transform non-null values 【发布时间】:2016-03-31 19:07:46 【问题描述】:

我想知道mysql是否有一个接收两个参数的函数,如果第一个为null,则返回null,否则返回第二个。

这将是if(something is null, null, anotherthing) 的快捷方式。

【问题讨论】:

@GordonLinoff 我认为存在一些误解。 coalesce 返回第一个非空值,如果没有非空值,则返回 null,对吗?我想转换一个非空值,或者如果它为空则返回空。它类似于 Haskell 中 Maybe 值的 fmap 行为 不,没有这个功能,但你可以自己写。 @dnoeth 这就是答案。很简单;) 【参考方案1】:

不幸的是,你的行为没有功能,但如果你有权限创建你自己的功能很简单,否则你也可以像你已经展示的那样在你的查询中添加一个IF THEN ELSE,但这会是你的问题没有答案。如果您想创建一个函数,那么您将遇到需要显式参数类型的问题,并且不幸的是,使用 mysql 重载函数也不起作用(相同的函数名称但不同的参数类型)。因此,对于不同类型的不同函数,您需要具有不同函数名称的不同函数。它看起来像这样:

    CREATE FUNCTION `fmap_varchar`(e1 VARCHAR(255), e2 VARCHAR(255) )
    RETURNS VARCHAR(255) DETERMINISTIC
    RETURN IF(e1 IS NULL, NULL, e2);

您可能还需要注意正确的字符集,您也可以在返回子句中指定这些字符集。

以及您已经给出的查询的解决方案:

    SELECT IF(something IS NULL, NULL, anotherthing) FROM your_table;

【讨论】:

感谢您理解问题的核心 很抱歉我找不到更好的解决方案,因为我也不喜欢查询中的此类语句,但我至少希望将它们放在一起。 MySQL 非常适合小型项目或具有标准功能,但以如此低的要求进行定制有时很烦人。但是每个 DBMS 都有优缺点。

以上是关于Mysql函数转换非空值的主要内容,如果未能解决你的问题,请参考以下文章

mysql关联left join条件on和where条件的区别及结合coalesce函数

MySQL 按空值和非空值分组

MySQL

mysql创建表时的空值和非空值设置有啥讲究

mysql 8 pivot 查询应该返回一个非空值

MySQL