日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql模糊匹配查询_Mysql之模糊匹配查询

發布時間:2023/12/10 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql模糊匹配查询_Mysql之模糊匹配查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mysql 模糊匹配查詢

MySQL提供標準的SQL模式匹配,以及一種基于像Unix實用程序,如:vi、grep和sed的擴展正則表達式模式匹配的格式

SQL 模式

SQL的模式匹配允許你使用“_”匹配任何單個字符,而“%”匹配任意數目字符(包括零個字符)。在MySQL中,SQL的模式缺省是忽略大小寫的。

注意:在你使用SQL模式時,你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。

語法:SELECT 字段 FROM 表 WHERE 某字段 Like 條件

其中關于條件,SQL提供了兩種匹配模式:

百分號(%):表示任意個或多個字符??善ヅ淙我忸愋秃烷L度的字符。

demo1

SELECT * FROM character WHERE name LIKE ‘%孫%';

即匹配姓名為“孫行者”,“行者孫,“行者孫”等包含“孫”類型的數據

demo2

SELECT * FROM character WHERE name LIke '%孫%' and name like '%行%';

即匹配姓名為“孫行者”,“行者孫,“行者孫”等包含“孫”和“行”的數據

demo3

SELECT * FROM character WHERE name LIke '%孫%行%‘;

只能匹配姓名為“孫行者”等類似“...孫...行...”的數據

下劃線(_):表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句:(可以代表一個中文字符)

demo1

SELECT * FROM character WHERE name LIKE ‘_三_';

即匹配姓名為“..三..”類型的數據,前后均只有一個字符

demo2

SELECT * FROM character WHERE name LIKE ‘_三';

即匹配姓名類似“...三”類型的數據,前面有且只有一個字符

正則模式

正則表達式作用是匹配文本,將一個模式(正則表達式)與一個文本穿進行比較。

MySQL用where子句對正則表達式提供了初步的支持,允許你指定用正則表達式過濾SELECT檢索出的數據。

MySQL正則表達式僅僅使SQL語言的一個子集,可以匹配基本的字符、字符串

select * from wp_posts where post_name REGEXP 'hello';

可以檢索出列post_name中所有包含hello的行

. 匹配除\n之外的任意單個字符

select * from wp_posts where post_name REGEXP '.og';


注:.是正則表達式中的一個特殊字符。它表示匹配一個字符,因此bog,cog,dog等等都能匹配。

注意:

關于大小寫的區分:MySQL中正則表達式匹配(從版本3.23.4后)不區分大小寫。

如果要區分大小寫,應該使用BINARY關鍵字,例如:

where post_name REGEXP BINARY 'Hello .000'

^匹配字符串開始位置,如查詢所有姓王的人名

select name from 表名 where name REGEXP '^王';

$匹配字符串結束位置,如查詢所有姓名末尾是“明”的人名

select name from 表名 where name REGEXP '明$';

進行OR匹配

為搜索兩個串之一(或者這個串,或者為另外一個串),使用|。

| 作為OR操作符,表示匹配其中之一。可以給出兩個以上的OR條件。

select * from products where pro_id REGEXP '1000|2000';

這樣就1000和2000都能匹配并返回,當然,使用多個|就可以匹配多個串

[ ]匹配任何單一字符,是另一種形式的OR語句,可縮寫的OR語句

例如,匹配范圍:[0123456789]可以匹配0到9,[1-4] [4-9] 也是合法的范圍。

此外,范圍不一定只是數值的,[a-z]匹配任意字母字符。

例如,查詢出w/z/s開頭的人的人名

SELECT prod_name FROM products WHERE prod_name REGEXP '^[wzs]';

[^....]匹配不包含在[ ]的字符,如查詢出chenmin之外的人名

SELECT prod_name FROM products WHERE prod_name REGEXP '^[wzs]';

^的雙重用途:在集合中(用[ ]定義),它用來否定該集合。否則,用來指串的開始

匹配特殊字符使用\進行轉義

\為前導。即轉義,正則表達式內具有特殊意義的所有字符都必須以這種方式轉義。

(1)\\- 表示查找-

(2)\\. 表示查找.

(3)\\f 表示換頁

(4)\\n 表示換行

(5)\\r 表示回車

(6)\\t 表示制表

(7)\\v 表示縱向制表

匹配字符類

(``1``)[:alnum:] 任意字母和數字(同[a-zA-Z0-``9``])

(``2``)[:alpha:] 任意字符(同[a-zA-A])

(``3``)[:blank:] 空格和制表符(同[\\t])

(``4``)[:digit:] 任意數字(同[``0``-``9``])

(``5``)[:lower:] 任意小寫字母(同[a-z])

(``6``)[:upper:] 任意大寫字母(同[A-Z])

(``7``)[:space:] 包括空格在內的任意空白字符(同 [\\f\\n\\t\\r\\v])

(``8``)[:cntrl:] ASCII控制字符(ASCII ``0``到``31``和``127``)

(``9``)[:graph:] 與["print:]相同,但不包括空格

(``10``)[:print:] 任意可打印字符

(``11``)[:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符

(``12``)[:xdigit:] 任意十六進制數字(同 [a-fA-F0-``9``])

匹配多個示例,關于重復元字符

元字符 說明

* 0個或多個匹配

+ 1個或多個匹配(等于 {1, })

? 0個或1個匹配(等于 {0, 1})

{n} 指定數目的匹配

{n, } 不少于指定數目的匹配

{n ,m} 匹配數目的范圍(m不超過255)

select prod_name from products where prod_name REGEXP '[[:DIGIT:]]{4}';

如前所述,[:digit:]匹配任意數字,因而它為數字的一個幾何。

[[:digit:]]{4}匹配連在一起的任意4位數字,當然,上面的例子也可以這樣寫REGEXP '[0-9][0-9][0-9][0-9]'

定位符

^ 文本的開始

$ 文本的末尾

[[:<:>

[[:>:]] 詞的結尾

注:like匹配整個串,而REGEXP匹配子串。

in查詢

叫in查詢不是很合理,更合理的說法是:in其實和=類似,區別在于:=后面是一個值。in后面可以是多個值。

demo1

select * from role where name in("唐三");

即匹配姓名為“唐三”一行數據;

demo2

select * from role where name in("唐三","唐三藏");

即匹配姓名為“唐三”,“唐三藏”一行數據;

demo3

select * from role where name in("唐三","%行者%")

只匹配姓名為“唐三”一行數據;即in查詢不支持模糊查詢,如示例4

demo4

select * from role where name in("%行者%")

無匹配結果

like contact模糊查詢

CONCAT(str1,str2,…) 函數返回結果為連接參數產生的字符串。

select * from role where name like contact("%","三","%");

即匹配姓名為“唐三”,“唐三藏”等類型的數據數據;

like contact模糊查詢強大的地方在于可以對傳進來的參數進行某查詢,比如經前端提交上的數據,賦值給參數name,則可以select * from table where name like contact("%",${name},"%")

總結

以上是生活随笔為你收集整理的mysql模糊匹配查询_Mysql之模糊匹配查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。