Mysql - 转换非空值第2部分

时间:2016-03-31 19:51:06

标签: mysql sql

In this question我问过Mysql是否有一个接收两个参数的函数,如果第一个是null则返回null,否则返回第二个参数。有人在评论部分说这种功能不存在。如何在Mysql中定义此函数,考虑到它可能接收任何类型的参数,并且返回值可以为null或与第二个参数的类型相同?它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

Select IF(ISNULL(arg1), null, arg2)

详细了解Comparison Functions and OperatorsControl Flow Functions

答案 1 :(得分:0)

根据您的要求,这是不可能的。

存储函数(用SQL编写)和用户定义函数(用C编写)的参数和返回值都是静态类型的。

当然,MySQL在隐式转换方面非常灵活,但值仍然是键入的。即使您对隐式转换没有问题,但这种情况比看似显而易见的解决方案更可取,这种情况很难想象。

IF(foo IS NULL,foo,bar)就足够了,并且正确地保留了底层类型,IF(foo IS NULL,NULL,bar)几乎是同一个东西,虽然foo的类型会丢失(例如“它是一个NULL DATETIME” )。

您之前已经拒绝了这些,原因并非直观明显。当内置插件可以实现目的时,重新发明轮子的动机很难理解。