一、select ifnull(etl(filed(col,...))) ;
mysql中实现oracle的decode函数需要用到三个函数:
(1)ELT(N,str1,str2,str3,...)
若N = 1,则返回值为 str1 ,若N = 2,则返回值为 str2 ,以此类推。 若N 小于1或大于参数的数目,则返回值为 NULL 。 ELT() 是 FIELD()的补数。
(2)FIELD(str,str1,str2,str3,...)
返回值为str1, str2, str3,……列表中的str 指数。在找不到str 的情况下,返回值为 0 。
如果所有对于FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数按照双倍进行比较。
如果str 为NULL,则返回值为0 ,原因是NULL不能同任何值进行同等比较。FIELD() 是ELT()的补数。
NULL,则返回值为0 ,原因是NULL不能同任何值进行同等比较。FIELD() 是ELT()的补数。
(3)IFNULL(expr1,expr2)
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境
Select IFNULL(ELT( FIELD(17 ,13, 14, 15, 16, 17, 18, 19) ,'Thirteen','Fourteen','Fifteen','Sixteen','Seventeen','Eighteen','Nineteen') ,'Adult') str ; Seventeen
二、直接使用CASE WHEN
Select Name, case when Age = 13 then 'Thirteen' when Age = 14 then 'Fourteen' when Age = 15 then 'Fifteen' when Age = 16 then 'Sixteen' when Age = 17 then 'Seventeen' when Age = 18 then 'Eighteen' when Age = 19 then 'Nineteen' else 'Adult' end as AgeBracket FROM Person