In this question我问过Mysql是否有一个接收两个参数的函数,如果第一个是null
则返回null
,否则返回第二个参数。有人在评论部分说这种功能不存在。如何在Mysql中定义此函数,考虑到它可能接收任何类型的参数,并且返回值可以为null或与第二个参数的类型相同?它甚至可能吗?
答案 0 :(得分:0)
试试这个:
Select IF(ISNULL(arg1), null, arg2)
详细了解Comparison Functions and Operators和Control Flow Functions。
答案 1 :(得分:0)
根据您的要求,这是不可能的。
存储函数(用SQL编写)和用户定义函数(用C编写)的参数和返回值都是静态类型的。
当然,MySQL在隐式转换方面非常灵活,但值仍然是键入的。即使您对隐式转换没有问题,但这种情况比看似显而易见的解决方案更可取,这种情况很难想象。
IF(foo IS NULL,foo,bar)
就足够了,并且正确地保留了底层类型,IF(foo IS NULL,NULL,bar)
几乎是同一个东西,虽然foo的类型会丢失(例如“它是一个NULL DATETIME” )。
您之前已经拒绝了这些,原因并非直观明显。当内置插件可以实现目的时,重新发明轮子的动机很难理解。