一、FIND_IN_SET():
FIND_IN_SET()
函數返回指定字符串在以逗號分隔的字符串列表中的位置。常用在部門的子部門或者子部門的上級部門等場景下使用。
FIND_IN_SET(needle,haystack);
FIND_IN_SET()
函數接受兩個參數:
- 第一個參數
needle
是要查找的字符串。 - 第二個參數
haystack
是要搜索的逗號分隔的字符串列表。
FIND_IN_SET()
函數根據參數的值返回一個整數或一個NULL
值:
- 如果
needle
或haystack
為NULL
,則函數返回NULL
值。 - 如果
needle
不在haystack
中,或者haystack
是空字符串,則返回零。 - 如果
needle
在haystack
中,則返回一個正整數。
請注意,如果needle
包含逗號(,
),該函數將無法正常工作。 此外,如果needle
是一個常量字符串,而且haystack
是一個類型為SET
的列,MySQL將使用位算術優化。
二、LOCATE(substr,str) , LOCATE(substr,str,pos)
LOCATE(substr,str) , LOCATE(substr,str,pos)
第一個語法返回字符串 str中子字符串substr的第一個出現位置。第二個語法返回字符串str中子字符串substr的第一個出現位置, 起始位置在pos。如若substr 不在str中,則返回值為0。
find_in_set 和 like 和 in 以及locate 的區別:
四種語句的使用場景各有不同,需要根據特定場景使用指定函數,like是廣泛的模糊匹配,字符串中沒有分隔符,Find_IN_SET 是精確匹配,字段值以英文”,”分隔。in語句相對於find_in_set語句的執行效率較高。locate相對於like語句的執行效率較高,所以正常可以考慮使用locate代替like。
三、elt(N,str1,str2,str3....)
ELT(N,str1,str2,str3,...)
INTERVAL()函數進行比較列表(N1,N2,N3等等)中的N值。該函數如果N<N1返回0,如果N<N2返回1,如果N<N3返回2 等如果N為NULL,它將返回-1.列表值必須是 N1<N2<N3的形式才能正常工作。
五、elt函數與interval實現分組統計
select elt(interval(d.yb,0, 100, 500, 1000), 'less100', '100to500', '500to1000', 'more1000') as yb_level, count(d.id) as cnt
from k1 d group by elt(interval(d.yb, 0, 100, 500, 1000), 'less100', '100to500', '500to1000', 'more1000K');
六、CAST(x AS type)轉換數據類型
SELECT CAST("2017-08-29" AS DATE);-> 2017-08-29
七、NULLIF(expr1, expr2)比較兩個字符串,如果字符串 expr1 與 expr2 相等 返回 NULL,否則返回 expr1
SELECT NULLIF(25, 25);->
八、ISNULL(expression)判斷表達式是否為 NULL
SELECT ISNULL(NULL);->1
九、IFNULL(v1,v2)如果 v1 的值不為 NULL,則返回 v1,否則返回 v2。
SELECT IFNULL(null,'Hello World')->Hello World
十、IF(expr,v1,v2)如果表達式 expr 成立,返回結果 v1;否則,返回結果 v2。
SELECT IF(1 > 0,'正確','錯誤')->正確
十一、CONVERT(s USING cs)函數將字符串 s 的字符集變成 cs
SELECT CHARSET('ABC') ->utf-8 SELECT CHARSET(CONVERT('ABC' USING gbk)) ->gbk
十二、COALESCE(expr1, expr2, ...., expr_n)返回參數中的第一個非空表達式(從左向右)
SELECT COALESCE(NULL, NULL, NULL, 'csdn.com', NULL, 'google.com'); -> csdn.com