支付宝赞助帐号:service@kuitao8.com 

Mysql 函数使用记录(二)——ELT()、FIELD()、IFNULL()

Created2018-01-30   Views 71    Author 懒人程序

昨天在对一业务修改的过程中想到用DECODE()来实现效果,转眼发现目前使用的是Mysql库,经过查阅,最终用ELT()、FIELD()、IFNULL()函式来实现需求。现对其做一个记录。

语法:

ELT(n,str1,str2,str3,...):如果n=1,则返回str1,如果n=2,则返回str2,依次类推。如果n小于1或大于引数个数,返回NULL。ELT()是FIELD()的功能补充函式。

mysql >  SELECT ELT( 3 , ' hello ' , ' halo ' , ' test ' , ' world ' );
 + -- ----------------------- -------------+ 
| ELT( 3 , ' hello ' , ' halo ' , ' test ' , ' world ' ) | 
+ -- ----------- -------------------------+ 
|test                                  | 
+ -- ------------------------------------+ 
1 row in  set
mysql >
FIELD(str,str1,str2,str,str3,str4...) :返回str在后面的引数列(str1,str2,str,str3,str4...)中的索引,起始索引为1。如果未在引数列中发现str则返回0。

mysql >  SELECT FIELD( ' halo ' , ' hello ' , ' halo ' , ' test ' , ' world ' );
 + -- --------------------- ----------------------+ 
| FIELD( ' halo ' , ' hello ' , ' halo ' , ' test ' , ' world ' ) | 
+ ---------------------------------------------+ 
|                                            2  | 
+ -- -------------------------------------------+ 
1 row in  set

mysql > IFNULL(expr1,expr2):如果expr1是NULL,则返回expr2,如果expr1不是NULL,则返回expr1。IFNULL()返回一个数字或字串值,取决于它被使用的上下文环境。

mysql >  SELECT IFNULL( NULL , 8 );
 + -- --------------+ 
| IFNULL( NULL , 8 ) | 
+ -- ----------- ---+ 
|               8  | 
+ -- --------------+ 
1 row in  set
mysql >  SELECT IFNULL( ' hello ' , ' world ' );
 + -- -----------------------+ 
| IFNULL( ' hello ' , ' world ' ) | 
+ -- -----------------------+ 
| hello                    | 
+ -- -------------- ---------+ 
1 row in  set
mysql >  SELECT IFNULL( null , ' world ' );
+ -- --------------------+ 
| IFNULL( null , ' world ' ) | 
+ -- ------------- -------+ 
| world                 | 
+ -- --------------------+ 
1 row in  set 

mysql > 应用:

  如:订单记录中储存了该订单的来源型别编码,现需将其来源名称在页面列表中展示,来源资讯并未单独建表储存,现需将查询语句做出修改以达到目的:

  在Oracle中我们可以用decode()函式来获取到来源名称:decode(条件,值1,返回值1,值2,返回值2...,预设值);

  在Mysql中呢,我们需要ELT()、FIELD()来实现,必要的时候还会用到IFNULL()来实现最终效果。对于上述需求,我们可以采取以下sql来实现:

SELECT *,IFNULL(ELT(FIELD(type, ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' ), ' 来源A ' , ' 来源B ' , ' 来源C ' , ' 来源D ' ), ' 未知' ) name from  order ;

记录完毕!^_^~

  

上一篇: mysql常用的笔记
下一篇: MySQL 函式
支持键盘 ← →

邮件订阅

订阅我们的精彩内容