關於 mysql 幾個高級函數的使用總結


一。FIND_IN_SET():

  FIND_IN_SET()函數返回指定字符串在以逗號分隔的字符串列表中的位置。常用在部門的子部門或者子部門的上級部門等場景下使用。

  FIND_IN_SET(needle,haystack);

  FIND_IN_SET()函數接受兩個參數:

  • 第一個參數needle是要查找的字符串。
  • 第二個參數haystack是要搜索的逗號分隔的字符串列表。

  FIND_IN_SET()函數根據參數的值返回一個整數或一個NULL值:

  • 如果needlehaystackNULL,則函數返回NULL值。
  • 如果needle不在haystack中,或者haystack是空字符串,則返回零。
  • 如果needlehaystack中,則返回一個正整數。

  請注意,如果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,...)

   如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小於1或大於參數個數,返回NULL。ELT()是FIELD()反運算。
四. INTERVAL(N,N1,N2,N3,..........)

   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');

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM