MySQL中的LOCATE和POSITION函數使用方法
-
FIND_IN_SET(str,strlist)
假如字符串str 在由N 子鏈組成的字符串列表strlist 中,則返回值的范圍在 1 到 N 之間。一個字符串列表就是一個由一些被‘,’符號分開的自鏈組成的字符串。如果第一個參數是一個常數字符串,而第二個是type SET列,則 FIND_IN_SET() 函數被優化,使用比特計算。如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數為NULL,則返回值為 NULL。這個函數在第一個參數包含一個逗號(‘,’)時將無法正常運行。返回值為str在strlist中的位置,從1開始計數。
- LOCATE(substr,str)
POSITION(substr IN str)
函數返回子串substr在字符串str中第一次出現的位置。如果子串substr在str中不存在,返回值為0。
- str IN (strlist)
查找str在strlist中出現的位置。如果找不到,返回false。strlist為一個用逗號連接的字符串。
函數的區別為:第一個函數FIND_IN_SET中的strlist為一個用逗號連接起來的字符串,一般為數據庫中的某個字段。當需要查找某個字段中是否有某個值的時候,使用這個函數。
第三個函數IN()剛好和函數FIND_IN_SET()相反,strlist為一個常量字符串序列,str為數據庫中某個字段。此時查找數據庫中的字段是否在某個序列中。
第二個函數為字符串查找函數,類似於php中的strpos()函數,或者javascript中的charAt()函數。此函數可以完成以上兩個函數的功能。
LOCATE(substr,str)
POSITION(substr IN str)
返回子串 substr 在字符串 str 中第一次出現的位置。如果子串 substr 在 str 中不存在,返回值為 0:
mysql> SELECT LOCATE('bar', ‘foobarbar');
-> 4 (說明是從1開始計數的)
mysql> SELECT LOCATE('xbar', ‘foobar');
-> 0
這個函數是多字節安全的。在 MySQL 3.23 中,這個函數是字母大小寫敏感的,當在 MySQL 4.0 中時,如有任一參數是一個二進制字符串,它才是字母大小寫敏感的。
LOCATE(substr,str,pos)
返回子串 substr 在字符串 str 中的第 pos 位置后第一次出現的位置。如果 substr 不在 str 中返回 0 :
mysql> SELECT LOCATE('bar', ‘foobarbar',5);
-> 7
這個函數是多字節安全的。在 MySQL 3.23 中,這個函數是字母大小寫敏感的,當在 MySQL 4.0 中時,如有任一參數是一個二進制字符串,它才是字母大小寫敏感的。
一個典型的例子是:
slect * from tablename where LOCATE(colum1,colum1,1)>0