MySQL语句 MySQL SHOW DATABASES 显示数据库MySQL SHOW SCHEMAS 显示数据库语句MySQL CREATE DATABASE 创建数据库语句MySQL CREATE SCHEMA 创建数据库语句MySQL SHOW CREATE DATABASE 显示创建数据库的语句MySQL SHOW CREATE SCHEMA 显示创建数据库的语句MySQL ALTER DATABASE 修改数据库语句MySQL ALTER SCHEMA 修改数据库语句MySQL DROP DATABASE删除数据库MySQL DROP SCHEMA 删除数据库MySQL USE 选择数据库语句MySQL CREATE TEMPORARY TABLE 创建临时表语句 MySQL CREATE TABLE 创建数据表语句MySQL DROP TEMPORARY TABLE 删除临时表语句MySQL DROP TABLE 删除数据表语句MySQL SELECT 查询语句MySQL INSERT INTO 增加数据语句MySQL UPDATE 更新语句MySQL ALTER TABLE 修改数据表语句MySQL SHOW TABLES 显示数据表语句MySQL DESCRIBE/DESC 查看数据表/视图语句MySQL SHOW CREATE TABLE 显示创建表语句MySQL DELETE 删除表数据语句MySQL WHERE 条件语句MySQL TRUNCATE 清空表语句MySQL LIKE 模糊匹配语句MySQL NOT LIKE 模式匹配外语句MySQL DISTINCT 去重语句MySQL AS 别名语句MySQL INSERT IGNORE INTO 忽略重复数据插入语句MySQL GROUP BY 分组语句MySQL HAVING 包含语句MySQL LIMIT限制查询数量 语句MySQL ORDER BY 排序语句MySQL BETWEEN AND 筛选范围内数据语句MySQL NOT BETWEEN AND 筛选不在范围数据语句MySQL IS NULL 查询是否为NULL值语句MySQL IS NOT NULL 查询不为NULL值语句MySQL IN 查询某个范围内的数据语句MySQL NOT IN 查询某个不在范围内的数据语句MySQL SELECTI...INTO OUTFILE将查询结果输出到外部文件语句MySQL LOAD DATA大量数据快速导入数据库语句MySQL UNION 合并两个或多个SELECT语句MySQL HAVING对聚合结果进行筛选语句MySQL SOUNDS LIKE查询发音相似语句MySQL JOIN 交叉连接语句MySQL CROSS JOIN交叉连接语句MySQL INNER JOIN交叉连接语句MySQL LEFT JOIN 左连接语句MySQL RIGHT JOIN 右连接语句MySQL EXISTS存在查询语句MySQL NOT EXISTS不存在查询语句MySQL CREATE VIEW创建视图语句MySQL RENAME TABLE重命表名/视图名语句MySQL ALTER VIEW 修改视图语句MySQL DROP VIEW 删除视图语句MySQL SHOW INDEX查看索引语句MySQL DROP INDEX删除索引语句MySQL EXPLAIN分析查询语句MySQL数据类型 MySQL tinyint、smallint、mediumint、int、bigint整数数据类型(精确值)MySQL decimal、numeric、double、float、real小数数据类型(精确、近似值)MySQL date、time、year、timestamp、datetime日期时间数据类型MySQL char、varchar、text、enum、set字符串类型MySQL bit、binary、varbinary、tinyblob、blob、mediumblob、longblob二进制数据类型MySQL空间数据类型MySQL函数 MySQL COUNT 统计函数MySQL ANY_VALUE函数 禁止 ONLY_FULL_GROUP_BY 值拒绝MySQL CASE 多分支函数MySQL LENGTH 返回字节数函数MySQL CHARACTER_LENGTH 返回字符数函数MySQL CHAR_LENGTH 返回字符数函数MySQL SUBSTRING提取字符串函数MySQL CONCAT 合拼字符串函数MySQL INSERT替换字符串函数MySQL LOWER 字符串转为小写 函数MySQL UPPER 字符串转为大写 函数MySQL LEFT 提取左侧字符 函数MySQL RIGHT 提取右侧字符 函数MySQL TRIM 删除头尾空格或指定字符 函数MySQL REPLACE 替换字符串函数MySQL REVERSE 字符串反转函数MySQL ABS求绝对值函数MySQL FIND_IN_SET 查逗号分隔特定值函数 MySQL ASCII最左边字符的数字值函数MySQL BIN将整数值转二进制字符串函数MySQL BIT_LENGTH返二进制字符串长度函数MySQL CONCAT_WS用分隔符连接字符串函数MySQL INTERVAL 返N值在区间段索引位置 函数MySQL ELT 指定位置提取子字符串函数MySQL IFNULL 处理NULL值函数MySQL EXPORT_SET二进制位生成拼接字符串函数MySQL FIELD 包含特定值的位置函数MySQL FORMAT 返回带有格式的数字函数MySQL TO_BASE64 字符串转base-64编码函数MySQL FROM_BASE64 将base-64编码解码函数MySQL AES_ENCRYPT 使用密钥进行加密函数MySQL AES_DECRYPT使用密钥解密函数MySQL HEX字符串转十六进制函数MySQL UNHEX 十六进制字符串转二进制数据函数MySQL INSTR 返回子字符串第一次出现的索引函数MySQL REGEXP 正则表达式函数MySQL NOT REGEXP不匹配正则表达式函数MySQL LCASE用于转换字符串为小写函数MySQL LOAD_FILE 加载文件到数据库函数MySQL LOCATE 搜索字符串第一次出现的位置函数MySQL LPAD左侧添加指定长度字符函数MySQL LTRIM删除字符串左侧空格的函数MySQL MAKE_SET 创建集合函数MySQL MATCH() AGAINST()两函数来实现全文搜索MySQL MID提取指定位置字符串函数MySQL OCT 返指定数值的八进制形式字符串函数MySQL OCTET_LENGTH返回字符串长度函数MySQL ORD获取字符ASCII码函数MySQL POSITION查字符串在某子字符串起始位置函数MySQL QUOTE返回用单引号包围的字符串函数MySQL REPEAT重复字符串次数函数MySQL REPLACE替换字符串中的子字符串函数MySQL REVERSE反转字符串函数MySQL RIGHT从右侧截取指定长度字符串函数MySQL RLIKE正则表达式函数MySQL RPAD向字符串的右侧填充指定字符函数MySQL RTRIM去除字符串右侧的空格函数MySQL SOUNDEX将一个字符串转为发音字符串函数MySQL SPACE生成指定数量空格函数MySQL STRCMP比较两个字符串大小函数MySQL SUBSTR从字符串中截取子字符串函数MySQL SUBSTRING_INDEX按指定字符分隔后进行截取函数MySQL UCASE 小写字母换大写字母函数Mysql WEIGHT_STRING 返回字符串的权重字符串函数MySQL =等于赋值运算符MySQL <=>运算符MySQL &(按位与)运算符MySQL > 大于运算符MySQL >>位右移运算符MySQL >=大于等于运算符MySQL <小于运算符MySQL (<>或!=)不等于运算符MySQL <<位左移运算符MySQL <= 小于等于运算符MySQL %或mod()求余运算符MySQL *乘法运算符MySQL +加法运算符MySQL -减法运算符MySQL -负号运算符MySQL JSON_EXTRACT从JSON数据提取字段值函数MySQL ->JSON数据提取运算符 MySQL JSON_UNQUOTE去除JSON值的引号函数MySQL ->>提取JSON去除引号的值运算符MySQL /除法运算符MySQL DIV整数除法运算符MySQL :=特殊赋值运算符MySQL ^位异或运算符MySQL |位或运算符MySQL ~位取反运算符MySQL ABS 返绝对值函数MySQL ACOS反余弦函数MySQL ADDDATE 日期函数MySQL DATE_ADD加时间间隔日期函数MySQL SUBDATE减时间间隔函数Mysql DATE_SUB减去时间间隔函数MySQL DATE从日期时间值中提取日期部分函数MySQL DATEDIFF计算两个日期之间的天数差异函数MySQL TIMEDIFF两日期时间的时间差函数MySQL MINUTE取日期时间中分钟数函数MySQL HOUR取日期时间中小时数函数MySQL SECOND取日期时间值中秒数函数MySQL CONVERT_TZ 将日期时间值转为另一时区函数MySQL DAYOFYEAR返回日期值对应的一年中第几天函数MySQL TIMESTAMPDIFF算两日期时间之间的时间差函数MySQL TO_DAYS日期转换为天数函数MySQL ​FROM_UNIXTIME将时间戳转换日期时间格式函数MySQL TO_SECONDS将日期时间值转换为秒数函数MySQL WEEK返回日期对应的星期数函数MySQL WEEKDAY返回日期对应的星期几的整数函数MySQL WEEKOFYEAR返回日期对应的星期数函数MySQL YEARWEEK返回日期的年和周的函数MySQL DATE_FORMAT将日期或日期时间值格式化函数MySQL STR_TO_DATE将字符串转日期或日期时间函数MySQL TIME_FORMAT格式化时间值函数MySQL UNIX_TIMESTAMP将日期时间转换时间戳函数MySQL ADDTIME时间加法运算函数MySQL AND和&&逻辑运算符与MySQL NOT和!逻辑运算符非MySQL OR和||逻辑运算符或MySQL XOR逻辑运算符异或MySQL ST_Area计算几何对象的面积MySQL Area函数MySQL ST_AsBinary将几何对象转二进制函数MySQL ST_AsWKB将几何对象转二进制函数MySQL AsBinary函数MySQL AsWKB函数MySQL ST_AsGeoJSON几何对象转GeoJSON格式函数MySQL ST_AsText将空间对象转文本函数MySQL ST_AsWKT空间对象转文本函数MySQL AsText()函数

MySQL REGEXP 正则表达式函数

MySQL数据库的REGEXP函数是一种正则表达式函数,用于在文本中匹配正则表达式。它可以在查询语句中使用,以便根据特定的模式搜索和筛选数据。本文将介绍REGEXP函数的语法、案例以及注意事项。RLIKE 是REGEXP的一个同义词REGEXP函数不区分大小写。

一、REGEXP函数语法

expr REGEXP pat

expr RLIKE pat

expr(字符串)匹配指定的 pat(正则表达式)字符串就返回1 ,否则0。

如果 expr 或 pat 是NULL ,返回值是NULL。

简单示例

mysql> SELECT 'Michael!' REGEXP '.*';
+------------------------+
| 'Michael!' REGEXP '.*' |
+------------------------+
|                      1 |
+------------------------+
mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
+---------------------------------------+
| 'new*\n*line' REGEXP 'new\\*.\\*line' |
+---------------------------------------+
|                                     1 |
+---------------------------------------+
mysql> SELECT 'a' REGEXP '^[a-d]';
+---------------------+
| 'a' REGEXP '^[a-d]' |
+---------------------+
|                   1 |
+---------------------+

MySQL regexp匹配所使用的字符,与常规正则表达式相同:

模式模式匹配什么
^匹配字符串开头
$匹配字符串结尾
.匹配任意单个字符
[...]匹配方括号间列出的任意字符
[^...]匹配方括号间未列出的任意字符
p1|p2|p3交替匹配任意 p1 或 p2 或 p3
*匹配前面的元素的零次或多次
+匹配前面的元素的一次或多次
?匹配前面的元素的零次或一次
{n}匹配前面的元素 n 次
{m,n}匹配前面的元素 m 至 n 次

正则表达式描述一组字符串。最简单的正则表达式是其中没有特殊字符的表达式。例如正则表达式 hello 匹配hello 什么都没有。

非平凡的正则表达式使用某些特殊的构造,这样它们可以匹配多个字符串。例如正则表达式hello|world 包含 | 替换操作符和匹配者hello 或world .

更复杂的例子,正则表达式 B[an]*s 匹配任何一个 Bananas ,Baaaaas , Bs ,以及任何以 B开头结尾是s ,并载有任何数目的a 或 n 中间的角色。

特殊的字符和构造:

匹配一个字符串的开头.

mysql> SELECT 'fo\nfo' REGEXP '^fo$';                   -> 0
mysql> SELECT 'fofo' REGEXP '^fo';                      -> 1

与一根绳子的末端匹配.

mysql> SELECT 'fo\no' REGEXP '^fo\no$';                 -> 1
mysql> SELECT 'fo\no' REGEXP '^fo$';                    -> 0

匹配任何字符(包括回车和换行)。

mysql> SELECT 'fofo' REGEXP '^f.*$';                    -> 1
mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$';                -> 1

匹配零个或多个字符的a实例。

mysql> SELECT 'Ban' REGEXP '^Ba*n'; -> 1
mysql> SELECT 'Baaan' REGEXP '^Ba*n'; -> 1
mysql> SELECT 'Bn' REGEXP '^Ba*n'; -> 1

匹配任何一个或多个序列a 实例

mysql> SELECT 'Ban' REGEXP '^Ba+n';                     -> 1
mysql> SELECT 'Bn' REGEXP '^Ba+n';                      -> 0

匹配0或1a 序列

mysql> SELECT 'Bn' REGEXP '^Ba?n';                      -> 1
mysql> SELECT 'Ban' REGEXP '^Ba?n';                     -> 1
mysql> SELECT 'Baan' REGEXP '^Ba?n';                    -> 0

匹配任一实例 de 或abc。

mysql> SELECT 'pi' REGEXP 'pi|apa';                     -> 1
mysql> SELECT 'axe' REGEXP 'pi|apa';                    -> 0
mysql> SELECT 'apa' REGEXP 'pi|apa';                    -> 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';                -> 1
mysql> SELECT 'pi' REGEXP '^(pi|apa)$';                 -> 1
mysql> SELECT 'pix' REGEXP '^(pi|apa)$';                -> 0

匹配序列的零个或多个实例 abc。

mysql> SELECT 'pi' REGEXP '^(pi)*$';                    -> 1
mysql> SELECT 'pip' REGEXP '^(pi)*$';                   -> 0
mysql> SELECT 'pipi' REGEXP '^(pi)*$';                  -> 1

重复;{n}和{m,n}表示法提供了一种更一般的编写正则表达式的方法,这种表达式与模式的前一个原子(或“小片”)的许多出现相匹配。m和n是整数。

     1、a*

        可写为a{0,} .

    2、a+

        可写为a{1,} .

    3、a?

        可写为a{0,1} .

更准确地说,a{n}恰好匹配的n个实例a。匹配n或多个实例 a。 a{m,n}匹配m到n个实例。如果m和n都给定,m必须小于或等于n。

m和n必须在0到RE_DUP_MAX(默认255)包括。

mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e';              -> 0
mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e';              -> 1
mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';           -> 1

匹配包含(如果使用^)a、b、c、d或X的任何字符。另外两个字符之间的a字符形成一个匹配从第一个字符到第二个字符的所有字符的范围。

例如,[0-9]匹配任何十进制数字。

要包含一个文字]字符,它必须立即跟随开括号[。要包含字符,必须先写或最后写。任何在[]对中没有定义的特殊含义的字符都只匹配其本身。

mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]';                 -> 1
mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]$';               -> 0
mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';              -> 1
mysql> SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$';             -> 0
mysql> SELECT 'gheis' REGEXP '^[^a-dXYZ]+$';            -> 1
mysql> SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';           -> 0

在括号表达式中(使用[和]编写)中,匹配该排序元素的字符序列。字符可以是单个字符,也可以是像换行符这样的字符名称。

下表列出了允许的字符名称。下表显示了允许的字符名称及其匹配的字符。对于以数值表示的字符,这些值用八进制表示。

名称字符名称字符
NUL0SOH001
STX002ETX003
EOT004ENQ005
ACK006BEL007
alert007BS010
backspace'\b'HT011
tab'\t'LF012
newline'\n'VT013
vertical-tab'\v'FF014
form-feed'\f'CR015
carriage-return'\r'SO016
SI017DLE020
DC1021DC2022
DC3023DC4024
NAK025SYN026
ETB027CAN030
EM031SUB032
ESC033IS4034
FS034IS3035
GS035IS2036
RS036IS1037
US037space' '
exclamation-mark'!'quotation-mark'"'
number-sign'#'dollar-sign'$'
percent-sign'%'ampersand'&'
apostrophe'\''left-parenthesis'('
right-parenthesis')'asterisk'*'
plus-sign'+'comma','
hyphen'-'hyphen-minus'-'
period'.'full-stop'.'
slash'/'solidus'/'
zero'0'one'1'
two'2'three'3'
four'4'five'5'
six'6'seven'7'
eight'8'nine'9'
colon':'semicolon';'
less-than-sign'<'equals-sign'='
greater-than-sign'>'question-mark'?'
commercial-at'@'left-square-bracket'['
backslash'\\'reverse-solidus'\\'
right-square-bracket']'circumflex'^'
circumflex-accent'^'underscore'_'
low-line'_'grave-accent'`'
left-brace'{'left-curly-bracket'{'
vertical-line'|'right-brace'}'
right-curly-bracket'}'tilde'~'
DEL177

mysql> SELECT '~' REGEXP '[[.~.]]';                     -> 1
mysql> SELECT '~' REGEXP '[[.tilde.]]';                 -> 1

 在括号表达式(使用[和]编写)中,[=pirte_class=]表示一个等价类。它匹配具有相同排序规则值的所有字符,包括它本身。

例如,如果o和(+)是等价类的成员,那么[[=o=]]、[[=(+)=]]和[o(+)]都是同义的。

一个等价类不能被用作一个范围的端点。

 在括号表达式(使用[和]编写)中,[:character_class:]表示与属于该类的所有字符的字符类匹配。

下表列出了标准的类名。

一个特定的区域设置可以提供其他的类名。一个字符类不能被用作一个范围的端点。

字符类名称意义
alnum字母数字字符
alpha字母型特征
blank白人角色
cntrl控制字符
digit数字字符
graph图形字符
lower大写字母字符
print图形或空格字符
punct标点字
space空间、标签、换行和回车
upper大写字母字符
xdigit十六进制数字字符
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+';       -> 1
mysql> SELECT '!!' REGEXP '[[:alnum:]]+';               -> 0

这些标记代表单词边界。它们分别与单词的开头和结尾匹配。一个单词是一个单词字符的序列,它的前面没有或后面没有单词字符。单词字符是字母数字的alnum类别或下划线(_ ).

mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

要在正则表达式中使用特殊字符的文字实例,请在它之前加上两个反斜杠(\)字符。mysql解析器解释了一个反斜杠,正则表达式库解释了另一个。例如,匹配字符串1+2 其中包括+ 字符,只有下列正则表达式的最后一个才是正确的:

mysql> SELECT '1+2' REGEXP '1+2';                       -> 0
mysql> SELECT '1+2' REGEXP '1\+2';                      -> 0
mysql> SELECT '1+2' REGEXP '1\\+2';                     -> 1

二、REGEXP函数案例

下面是一些使用REGEXP函数的案例,以帮助您更好地理解其用法:

查找包含特定字符串的行

假设我们有一个名为users的表,其中包含一个名为email的列,我们想要查找包含字符串example.com的所有行。我们可以使用以下查询:

SELECT *  FROM users  WHERE email REGEXP 'example.com';

查找以特定字符串开头的行

如果我们想要查找以字符串john开头的所有email行,可以使用以下查询:

SELECT *  FROM users  WHERE email REGEXP '^john';

查找包含特定模式的行

假设我们想要查找所有包含数字的phone_number列,我们可以使用以下查询:

SELECT *  FROM users  WHERE phone_number REGEXP '[0-9]';

三、注意事项

在使用REGEXP函数时,需要注意以下几点: