错误代码:1305。FUNCTION sql_univeristy 解码不存在

Error Code: 1305. FUNCTION sql_univeristy decode does not exist

我在 MySQL 中使用此查询时遇到错误。

这里是查询。

select course_id, sec_id, ID,
decode(name, NULL, '−', name)
from (section natural left outer join teaches)
natural left outer join instructor
where semester='Spring' and year=2010

这是错误 错误代码:1305。功能 sql_univeristy 解码不存在

是的,mySQL 中不存在 DECODE。有一个类似的 ELT 功能,但我认为不完全相同,而且您的用例并不真正需要它。 COALESCE 可能是您想要的,但这里有四种不同的方法:

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f9d37a049fc503b1b4848b7e278f2e34

create table test (name varchar(20));
insert into test(name) values('test'), ('jim'), (null);
select * from test;
SELECT name,
  coalesce(name, '-') as method1,
  if(name is null, '-', name) as method2,
  case when name is null then '-' else name end as method3,
  elt((name is null) + 1, name, '-') as method4
FROM test

COALESCE return是第一个非空参数。 IF 不符合 ANSI,但它允许条件逻辑,就像 CASE 一样(并且 CASE ANSI 兼容,因此您可以将它从一个 rdbms 移植到另一个 rdbms)。

最后是 ELT。这只是 returns 与提供的索引匹配的参数。因此,您可以使用 IS NULL 来测试名称,如果是 return 则为 1,否则为 0。由于如果索引小于 1,则 ELT returns null,因此您必须在 IS NULL 检查中加一。这绝对不如其他选项简单,我不会为了做一个简单的空值检查而经历所有这些。如果这就是您想要做的全部,那么 COALESCE 是您的不二之选。