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