1. 程式人生 > >Mysql 函式使用記錄(二)——ELT()、FIELD()、IFNULL()

Mysql 函式使用記錄(二)——ELT()、FIELD()、IFNULL()

昨天在對一業務修改的過程中想到用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                                 |
+--------------------------------------+
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 |
+---------------------------------------------+
row in set

mysql>

ELT 和field 通常連線使用,如data_model 原表中儲存的是1301,1302,1303,1304,1305,1306的程式碼,他們對應的中文是改款,換代,年型等資訊,就可以採用如下程式碼直接將資訊轉換成漢字。

SELECT id,elt(
		field(
			car_data.data_model.model_event,
			'1301',
			'1302',
			'1303',
			'1304',
			'1305',
			'1306'
		),
		'改款',
		'換代',
		'年型',
		'上市',
		'特別版',
		'新增'
	) AS mge FROM car_data.data_model;

IFNULL(expr1,expr2):如果expr1是NULL,則返回expr2,如果expr1不是NULL,則返回expr1。IFNULL()返回一個數字或字串值,取決於它被使用的上下文環境。

mysql> SELECT IFNULL(NULL,8);
+----------------+
| IFNULL(NULL,8) |
+----------------+
|              8 |
+----------------+
row in set

mysql> SELECT IFNULL('hello','world');
+-------------------------+
| IFNULL('hello','world') |
+-------------------------+
| hello                   |
+-------------------------+
row in set
mysql> SELECT IFNULL(null,'world');
+----------------------+
| IFNULL(null,'world') |
+----------------------+
| world                |
+----------------------+
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;