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函数转换非空值的主要内容,如果未能解决你的问题,请参考以下文章