MYSQL-ORCALE decode函数在MYSQL中的实现

一、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



你可能感兴趣的:(MYSQL)