Mysql - 转换非空值第 2 部分

标签 mysql sql

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

最佳答案

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

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

诚然,MySQL 在隐式转换方面非常灵活,但值仍然是类型化的。即使您可以接受隐式转换,也很难想象这比看似显而易见的解决方案更可取的场景。

IF(foo IS NULL,foo,bar) 足以达到目的并正确保留底层类型,并且 IF(foo IS NULL,NULL,bar)尽管 foo 的类型会丢失(例如“它是 NULL DATETIME”),但几乎是相同的事情。

您之前曾拒绝过这些,原因并不直观。当一个目的可以通过内置功能来实现时,重新发明轮子的动机就很难理解了。

关于Mysql - 转换非空值第 2 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342471/

相关文章:

php - jquery datatables mysql php DataTables警告(表ID ='displayData'): DataTables warning: JSON data from could not be parsed

mysql - 在第一行之前插入行

mysql - 仅列出与 Rails 3 中的用户相关的问题

sql - 按年份分组和 bool 列 postgres

mysql - SQL:从一条记录中提取多行

PHP删除脚本,返回 'viewsubjects.php?classroom_id=NO VALUE'

php - 将 mysql_result 变量转换为 mysqli 时遇到问题

sql - 是否可以在连接查询中包含双表

sql - 按日期、学生框架中的条件取最近的行

mysql - 你会如何输出count()?