上新上新接着上一篇小朱老师今天就来为大家讲讲这MySQL中内置函数。忘了的同学可以先复习一下之前的基础内容哦九道门数据库实战:MySQL模糊匹配查询(一) 进入正题,首先跟大家说明一点,在MySQL中下标是从1开始的,并不像Python、Java最左边第一位是0,因此MySQL中下标为0说明数据不存在,是有自己特殊含义的。 1、LOCATE()函数LOCATE(substr,str) locate函数的用法是在str中查找substr,返回第一次出现的位置。如果substr不存在于str中就返回0,如果substr存在于str中,返回值为:substr在str中第一次出现的位置下标。LOCATE(substr,str,〔pos〕) 代表从pos位置开始查询,同样是查找substr在str中第一次出现的位置。如果不在str中那就返回0,如果substr或者str中有一个是NULL,就返回NULL。SELECTlocate(a,banana);2SELECTlocate(a,banana,3);4SELECTlocate(z,banana);0SELECTlocate(10,banana);0SELECTlocate(NULL,banana);nullSELECTlocate(a,NULL);null 用法:用LOCATE关键字进行模糊匹配,跟使用通配符的作用是一样的SELECTfromdimcustomerwhereLOCATE(大,name)0;如果需要从某一个位置开始匹配查询,在后面加入位置即可(从1开始)SELECTfromdimcustomerwhereLOCATE(大,name,5)0; 2、POSITION函数POSITION(substrinstr) position函数的用法跟locate比较类似,用法都是一样的,只不过一个用,隔开,一个用in。 用法:用POSITION关键字进行模糊匹配,等同于:like大SELECTfromdimcustomerwherePOSITION(大INname); 3、INSTR函数INSTR(str,substr) 返回字符串substr在str中第一次出现的位置。参数跟locate的双参数形式一样,只是参数的顺序是相反的。 用法:用INSTR关键字进行模糊匹配,功能跟like一样,等同于:like大SELECTfrominformationwhereINSTR(name,大);instr函数作用,一般用于检索某字符在某字符串中的位置,等同于:like大SELECTfrominformationwhereINSTR(name,大)0; 4、MySQL基于regexp的正则匹配查询 在MySQL中支持regexp和rlike关键字,功能相同。 首先REGEXP是不支持通配符()匹配的,但是支持正则匹配规则的。 参数类型 作用 () 匹配字符串的开始位置,如a表示以字母a开头的字符串。 () 匹配字符串的结束位置,如X表示以字母X结尾的字符串。 (。) 这个字符就是英文下的点,它匹配任何一个字符,包括回车、换行等。 () 星号匹配0个或多个字符,在它之前必须有内容。如:selectfromtablewherenameregexpba(可以命中baaa) () 加号匹配1个或多个字符,在它之前也必须有内容。加号跟星号的用法类似,只是星号允许出现0次,加号则必须至少出现一次。 (?) 问号匹配0次或1次。 {n} 匹配指定n个 {n,} 匹配不少于n个 {n,m} 匹配nm个REGEXP大就是等同于大的;SELECTfrominformationwherenameREGEXP大;等同于SELECTfrominformationwherenamelike大; REGEXP中的或: 可以搜索多个字符串之一,相当于或or的意思支持‘或’符号,匹配包含MySQL或Python或Java的数据,支持叠加多个SELECTfrominformationwherenameREGEXPMySQLPythonJ匹配同时命中用户、表的数据可以用。连接,代表用户xxxx表,中间允许有任意个字符,顺序不能反。SELECTfromdimcustomerwherenameREGEXP用户。表; REGEXP中的正则表达式:〔〕 匹配〔〕中的几个字符之一,支持正则表达式;匹配包含英文字符的数据,默认不区分大小写情况下SELECTfrominformationwherenameREGEXP〔az〕;跟like一样,取反集加notREGEXP即可SELECTfrominformationwherenamenotREGEXP〔az〕;如果需要区分大小写需要加入binary关键字SELECTfrominformationwherenameREGEXPBINARY〔AZ〕;匹配包含数字的数据SELECTfrominformationwherenameREGEXP〔09〕;匹配包含数字或英文的数据,az、09都认定为一个单位,不要加多余符号SELECTfrominformationwherenameREGEXP〔az09〕;查询name字节长度为10,任意内容的数据SELECTfrominformationwherenameREGEXP。{10}39;;查询name字节长度为10,且都为英文的数据SELECTfrominformationwherenameREGEXP〔az〕{10}39;;查询name字节长度为10,且都为大写英文的数据,加上BINARY即可SELECTfrominformationwherenameREGEXPBINARY〔AZ〕{10}39;;查询name字节长度为6,且都为数字或。的数据SELECTfrominformationwherenameREGEXP〔09。〕{6}39;;查询name字节长度为6,且都为数字或。的数据;要求首位为1SELECTfrominformationwherenameREGEXP1〔09。〕{5}39;;查询name字节长度为6,且都为数字或。的数据;要求首位为1,末位为7SELECTfrominformationwherenameREGEXP1〔09。〕{4}739;; 好啦,本篇文章就到这里了,希望本文能帮助到你对MySQL的理解更进一步。 最后附上我们的粉丝小福利:MySQL经典50题赶紧留言领取吧。数据分析优质社群,等你加入哦