標籤:未在 ora name 文法 條件 過程 返回 業務 大於
昨天在對一業務修改的過程中想到用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 setmysql>
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 setmysql>
IFNULL(expr1,expr2):如果expr1是NULL,則返回expr2,如果expr1不是NULL,則返回expr1。IFNULL()返回一個數字或字串值,取決於它被使用的上下文環境。
mysql> SELECT IFNULL(NULL,8);+----------------+| IFNULL(NULL,8) |+----------------+| 8 |+----------------+1 row in setmysql> SELECT IFNULL(‘hello‘,‘world‘);+-------------------------+| IFNULL(‘hello‘,‘world‘) |+-------------------------+| hello |+-------------------------+1 row in setmysql> SELECT IFNULL(null,‘world‘);+----------------------+| IFNULL(null,‘world‘) |+----------------------+| world |+----------------------+1 row in setmysql>
應用:
如:訂單記錄中儲存了該訂單的來源類型編碼,現需將其來源名稱在頁面列表中展示,來源資訊並未單獨建表格儲存體,現需將查詢語句做出修改以達到目的:
在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 函數使用記錄(二)——ELT()、FIELD()、IFNULL()