【重学 MySQL】十七、比较运算符的使用
- **等于(`=`)**
- 基本用法
- 示例
- 注意事项
- 结论
- **安全等于运算符(`<=>`)**
- **不等于(`<>` 或 `!=`)**
- 示例
- 注意事项
- **大于(`>`)、大于等于(`>=`)、小于(`<`)、小于等于(`<=`)**
- 大于(`>`)
- 示例
- 大于等于(`>=`)
- 示例
- 小于(`<`)
- 示例
- 小于等于(`<=`)
- 示例
- **`IS NULL` 、`IS NOT NULL`**
- `IS NULL`
- 示例
- `IS NOT NULL`
- 示例
- 总结
- `LEAST` 和 `GREATEST`
- `LEAST`
- 语法
- 示例
- `GREATEST`
- 语法
- 示例
- 注意事项
- `BETWEEN AND`
- 语法
- 注意事项
- 示例
- `IN` 和 `NOT IN`
- `IN`
- 语法
- 示例
- `NOT IN`
- 语法
- 示例
- 注意事项
- `LIKE`
- MySQL 通配符
- `%`(百分号)
- 示例
- `_`(下划线)
- 示例
- 注意事项
- 使用`ESCAPE`子句
- 示例
- 语法
- 示例
- 使用`%`通配符
- 使用`_`通配符
- 注意事项
- `REGEXP` 和 `RLIKE`
- 语法
- 示例
- 正则表达式功能
- 常见的正则表达式
- 校验数字的表达式
- 校验字符的表达式
- 特殊需求表达式
- 注意事项
MySQL中的比较运算符用于在查询中比较两个表达式的大小、相等性或其他条件关系。这些运算符非常基础且重要,因为它们允许你根据特定条件过滤数据。
等于(=
)
在MySQL中,等号运算符(=
)用于比较两个值是否相等。如果两边的值相等,则表达式的结果为TRUE
;否则,结果为FALSE
。等号运算符在SELECT语句的WHERE子句中非常常见,用于筛选满足特定条件的记录。
基本用法
SELECT column_name(s)
FROM table_name
WHERE column_name = value;
这里,column_name
是你想要比较的列名,table_name
是表名,而value
是你想要与列中的值进行比较的值。
示例
假设有一个名为employees
的表,其中包含id
、name
和salary
等列,你想找出薪资为5000的所有员工:
SELECT *
FROM employees
WHERE salary = 5000;
这个查询会返回salary
列中值为5000的所有行的数据。
注意事项
- 当比较字符串时,MySQL默认是不区分大小写的(这取决于字符集的校对规则)。但是,你可以通过指定二进制校对规则(如
_bin
)来使比较区分大小写。 - 在与NULL进行比较时,使用等号运算符(
=
)是无效的,因为任何与NULL的比较操作都会返回NULL,而不是TRUE
或FALSE
。要检查NULL值,应使用IS NULL
或IS NOT NULL
。 - 在进行数值比较时,MySQL会自动进行类型转换(如果可能的话),但在某些情况下,这可能会导致意外的结果。因此,在编写涉及多种数据类型的比较时,最好确保类型一致或显式进行类型转换。
- MySQL中的等号运算符还可以与其他运算符(如逻辑运算符)结合使用,以构建更复杂的查询条件。
结论
等号运算符(=
)在MySQL中用于比较两个值是否相等,是SQL查询语句中非常基础且重要的一个部分。正确理解和使用等号运算符对于编写有效的SQL查询至关重要。
安全等于运算符(<=>
)
安全等于运算符(<=>)与等于运算符(=)的作用是相似的,唯一的区别
是‘<=>’可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。
SELECT 1 <=> '1', 1 <=> 0, 'a' <=> 'a', (5 + 3) <=> (2 + 6), '' <=> NULL,NULL <=> NULL FROM dual;
#查询commission_pct等于0.40
SELECT employee_id,commission_pct FROM employees WHERE commission_pct = 0.40;
SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> 0.40;
#如果把0.40改成 NULL 呢?
可以看到,使用安全等于运算符时,两边的操作数的值都为NULL时,返回的结果为1而不是NULL,其他返回结果与等于运算符相同。
不等于(<>
或 !=
)
在MySQL中,不等于运算符有两个主要的形式:<>
和 !=
。这两个运算符在功能上是完全相同的,都可以用来比较两个值是否不相等。如果两边的值不相等,则表达式的结果为TRUE
;否则,结果为FALSE
。
示例
假设我们有一个名为students
的表,其中包含id
、name
和grade
等列,我们想要找出所有成绩不等于90分的学生:
使用<>
运算符:
SELECT *
FROM students
WHERE grade <> 90;
或者使用!=
运算符:
SELECT *
FROM students
WHERE grade != 90;
这两个查询都会返回grade
列中值不等于90的所有行的数据。
注意事项
- 当与NULL值进行比较时,
<>
和!=
运算符的行为是一致的。任何与NULL的比较操作(除了IS NULL
和IS NOT NULL
)都会返回NULL,而不是TRUE
或FALSE
。因此,如果你想要检查某个列的值是否不是NULL,你应该使用IS NOT NULL
。 - 在编写SQL查询时,选择
<>
还是!=
主要取决于个人偏好和团队的编码规范。然而,需要注意的是,在某些情况下(特别是在与其他编程语言或框架的集成中),这两个运算符的可用性可能会有所不同。 - 在某些SQL方言或特定版本的数据库系统中,这两个运算符的支持程度可能略有不同,但在大多数情况下,它们都是可互换使用的。
总的来说,<>
和!=
是MySQL中用于表示不等于的两种等效运算符,你可以根据自己的喜好和项目的需求来选择使用哪一个。
大于(>
)、大于等于(>=
)、小于(<
)、小于等于(<=
)
在MySQL中,大于(>
)、大于等于(>=
)、小于(<
)和小于等于(<=
)是基本的比较运算符,用于在SQL查询的WHERE子句中比较列的值与指定的值或表达式。这些运算符允许你根据列的值筛选出满足特定条件的记录。
大于(>
)
大于运算符(>
)用于比较两个值,以确定左边的值是否大于右边的值。如果左边的值大于右边的值,则表达式的结果为TRUE
;否则,结果为FALSE
。
示例
假设我们有一个名为sales
的表,其中包含date
和amount
等列,我们想要找出所有销售额大于1000的记录:
SELECT *
FROM sales
WHERE amount > 1000;
大于等于(>=
)
大于等于运算符(>=
)用于比较两个值,以确定左边的值是否大于或等于右边的值。如果左边的值大于或等于右边的值,则表达式的结果为TRUE
;否则,结果为FALSE
。
示例
继续上面的例子,如果我们想要找出所有销售额大于或等于1000的记录:
SELECT *
FROM sales
WHERE amount >= 1000;
小于(<
)
小于运算符(<
)用于比较两个值,以确定左边的值是否小于右边的值。如果左边的值小于右边的值,则表达式的结果为TRUE
;否则,结果为FALSE
。
示例
回到sales
表的例子,如果我们想要找出所有销售额小于1000的记录:
SELECT *
FROM sales
WHERE amount < 1000;
小于等于(<=
)
小于等于运算符(<=
)用于比较两个值,以确定左边的值是否小于或等于右边的值。如果左边的值小于或等于右边的值,则表达式的结果为TRUE
;否则,结果为FALSE
。
示例
最后,如果我们想要找出所有销售额小于或等于1000的记录:
SELECT *
FROM sales
WHERE amount <= 1000;
这些比较运算符是SQL查询中非常基础且常用的部分,它们允许你根据数据的实际值来过滤和检索数据。
IS NULL
、IS NOT NULL
在MySQL中,IS NULL
、IS NOT NULL
是用于处理NULL值的不同方面的关键词和函数。
IS NULL
IS NULL
是一个条件表达式,用于检查某个列的值是否为NULL。如果列的值是NULL,则表达式的结果为TRUE;否则,结果为FALSE。它常用于WHERE子句中,以筛选出NULL值的记录。
示例
SELECT *
FROM table_name
WHERE column_name IS NULL;
这个查询会返回column_name
列中值为NULL的所有行的数据。
IS NOT NULL
IS NOT NULL
也是一个条件表达式,但它用于检查某个列的值是否不是NULL。如果列的值不是NULL,则表达式的结果为TRUE;否则,结果为FALSE。与IS NULL
相反,它用于筛选出非NULL值的记录。
示例
SELECT *
FROM table_name
WHERE column_name IS NOT NULL;
这个查询会返回column_name
列中值不为NULL的所有行的数据。
总结
IS NULL
和IS NOT NULL
是条件表达式,用于在WHERE子句中过滤出NULL值或非NULL值的记录。
LEAST
和 GREATEST
在MySQL中,LEAST
和 GREATEST
是两个非常有用的函数,它们允许你在一组值中找出最小或最大的值。这两个函数可以接受两个或更多的参数,并返回参数列表中的最小或最大值。
LEAST
LEAST
函数返回其参数列表中的最小值。如果参数中有NULL值,则LEAST
函数会忽略NULL值,但如果所有参数都是NULL,则结果也是NULL。
语法
LEAST(value1, value2, ..., valueN)
示例
SELECT LEAST(1, 3, 2, 5, 4); -- 结果是 1
SELECT LEAST(NULL, 3, 2, 5, 4); -- 结果是 2,因为NULL被忽略
SELECT LEAST(NULL, NULL); -- 结果是 NULL,因为没有非NULL值
GREATEST
与LEAST
相反,GREATEST
函数返回其参数列表中的最大值。同样地,如果参数中有NULL值,GREATEST
会忽略它们,但如果所有参数都是NULL,则结果也是NULL。
语法
GREATEST(value1, value2, ..., valueN)
示例
SELECT GREATEST(1, 3, 2, 5, 4); -- 结果是 5
SELECT GREATEST(NULL, 3, 2, 5, 4); -- 结果是 5,因为NULL被忽略
SELECT GREATEST(NULL, NULL); -- 结果是 NULL,因为没有非NULL值
注意事项
- 当
LEAST
或GREATEST
的参数中包含字符串时,比较是基于字符串的字典顺序进行的。这意味着,如果你混合了数字和字符串作为参数,结果可能会与你期望的不同,特别是当字符串看起来像数字时。 - 如果需要确保比较是基于数值的,确保所有参数都是数值类型,或者在使用之前将字符串参数转换为数值类型。
LEAST
和GREATEST
函数在数据分析和处理中非常有用,特别是在需要动态地选择一组值中的最小或最大值时。
BETWEEN AND
在MySQL中,BETWEEN AND
是一个在查询中指定范围搜索的条件。它允许你选择一个字段的值在指定的两个值之间的所有记录(包括边界值)。这个条件对于过滤数据非常有用,特别是当你想要检索一个字段在某个范围内的所有行时。
语法
SELECT column_names
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
column_names
是你想要从表中检索的列名。table_name
是包含数据的表名。column_name
是你想要应用范围搜索的列名。value1
和value2
定义了搜索范围的下限和上限。column_name
的值必须在这个范围内(包括value1
和value2
)。
注意事项
value1
应该小于或等于value2
。如果value1
大于value2
,则查询可能不会返回任何结果,因为不存在一个数同时大于某个数且小于另一个较小的数。BETWEEN AND
包括边界值。也就是说,如果列的值等于value1
或value2
,那么相应的行也会被检索出来。- 你可以使用日期、数字或字符串(尽管对于字符串,比较是基于字典顺序的,可能不是你想要的)作为
value1
和value2
。
示例
假设我们有一个名为orders
的表,其中包含order_id
、order_date
和amount
等列。如果我们想要找出所有在2023年1月1日到2023年1月31日之间下的订单,我们可以这样写查询:
SELECT *
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31';
这个查询会返回order_date
列的值在’2023-01-01’和’2023-01-31’之间(包括这两个日期)的所有行的数据。
IN
和 NOT IN
在MySQL中,IN
和 NOT IN
是两个非常有用的操作符,它们允许你在WHERE子句中指定一个值列表,并基于这些值来过滤查询结果。这两个操作符在处理多个可能的值作为过滤条件时特别有用。
IN
IN
操作符允许你指定一个值列表,然后返回字段值在该列表中的所有记录。如果字段的值等于列表中的任何一个值,那么该记录就会被选中。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ..., valueN);
示例
假设你有一个名为employees
的表,其中有一个名为department_id
的列,你想要查询ID为1、2或3的部门的所有员工,你可以这样写:
SELECT *
FROM employees
WHERE department_id IN (1, 2, 3);
这个查询会返回department_id
为1、2或3的所有员工的记录。
NOT IN
与IN
相反,NOT IN
操作符允许你指定一个值列表,并返回字段值不在该列表中的所有记录。如果字段的值不等于列表中的任何一个值,那么该记录就会被选中。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name NOT IN (value1, value2, ..., valueN);
示例
继续使用上面的employees
表作为例子,如果你想要查询ID不是1、2或3的部门的所有员工,你可以这样写:
SELECT *
FROM employees
WHERE department_id NOT IN (1, 2, 3);
这个查询会返回department_id
不是1、2或3的所有员工的记录。
注意事项
- 当使用
IN
或NOT IN
时,列表中的值可以是数字、字符串或日期等数据类型,但重要的是要确保这些值与你要比较的字段的数据类型相匹配。 - 如果列表中包含NULL值,则
IN
和NOT IN
的行为可能会与你的预期不同。特别是,column_name IN (NULL, ...)
永远不会为真,因为任何值与NULL的比较操作都会返回NULL,而不是TRUE或FALSE。因此,如果你的值列表中可能包含NULL,你可能需要重新考虑你的查询策略。 - 对于包含大量值的列表,使用
IN
或NOT IN
可能会影响查询的性能。在这种情况下,考虑使用其他查询策略,如连接(JOINs)或临时表。
LIKE
在MySQL中,LIKE
操作符用于在WHERE
子句中搜索列中的指定模式。它通常与通配符一起使用,以匹配字符串中的零个、一个或多个字符。最常见的通配符是%
(表示任意数量的字符)和_
(表示单个字符)。
MySQL 通配符
在MySQL中,通配符主要用于LIKE
操作符中,以匹配字符串中的特定模式。最常见的通配符有两个:%
(百分号)和_
(下划线)。
%
(百分号)
%
通配符代表零个、一个或多个字符。当在LIKE
语句中使用时,%
可以放在模式的开始、结束或中间位置,以匹配任意长度的字符串。
示例
- 匹配以"a"开头的任意字符串:
LIKE 'a%'
- 匹配以"z"结尾的任意字符串:
LIKE '%z'
- 匹配包含"abc"的任意字符串:
LIKE '%abc%'
- 匹配任意字符串(包括空字符串):
LIKE '%'
_
(下划线)
_
通配符代表单个字符。它必须匹配字符串中的一个确切字符位置。
示例
- 匹配任意单个字符后跟"bc"的字符串:
LIKE '_bc'
- 匹配以"a"开头,后跟任意单个字符,然后是"c"的字符串:
LIKE 'a_c'
注意事项
- 当使用
%
或_
作为搜索模式的一部分时,请确保它们是作为通配符使用,而不是作为文字字符。如果需要在模式中包含这些字符作为文字字符,你可能需要使用ESCAPE
子句来指定一个转义字符。 - 使用通配符进行搜索时,MySQL会扫描表中的每一行,并检查列值是否与模式匹配。对于大型表,这可能会导致查询性能下降。
- 在某些情况下,如果你可以使用其他类型的搜索(如
=
、>
、<
、BETWEEN
等),则应避免使用LIKE
和通配符,因为这些搜索通常更高效。 - 对于更复杂的文本搜索需求,MySQL提供了全文搜索功能,它提供了更强大和灵活的搜索能力,包括支持停用词、词干提取、布尔搜索等。
使用ESCAPE
子句
如果你需要在搜索模式中包含%
或_
作为文字字符,你可以使用ESCAPE
子句来指定一个转义字符。然后,在模式中,你可以通过在特殊字符前加上转义字符来将其视为文字字符。
示例
假设你有一个名为products
的表,其中有一个名为description
的列,你想要找到描述中包含100%
的产品。你可以这样写:
SELECT *
FROM products
WHERE description LIKE '100\%\%' ESCAPE '\';
在这个例子中,\
被定义为转义字符,所以\%
表示一个文字%
字符。注意,由于%
在SQL字符串中也是特殊字符(用于表示字符串的结束),所以你可能需要使用两个%
字符来表示一个文字%
字符(取决于你的SQL客户端或应用程序如何处理字符串)。但是,在LIKE
模式的上下文中,单个%
字符就足够了,并且我们在这里使用ESCAPE
子句来确保它被解释为文字字符。因此,上面的查询应该能够正确工作。然而,如果你只是想要匹配一个文字%
字符,那么一个%
就足够了,如上例所示。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
在这里,pattern
可以包含文字字符、%
和_
等通配符。
示例
使用%
通配符
假设你有一个名为customers
的表,其中包含名为name
的列,你想要找到所有名字以"J"开头的客户,你可以这样写:
SELECT *
FROM customers
WHERE name LIKE 'J%';
这个查询会返回name
列中所有以"J"开头的记录。
如果你想要找到名字中包含"son"的所有客户,不论"son"前后是否有其他字符,你可以这样写:
SELECT *
FROM customers
WHERE name LIKE '%son%';
使用_
通配符
如果你想要找到名字中第二个字符是"a"的所有客户,你可以使用_
来表示第一个字符(它可以是任何字符),然后紧跟一个"a":
SELECT *
FROM customers
WHERE name LIKE '_a%';
这个查询会返回name
列中所有第二个字符为"a"的记录。
注意事项
-
使用
LIKE
操作符时,请确保模式(pattern)是明确的,以避免返回过多的结果。例如,使用%
作为模式的开始和结束可能会返回表中的所有记录。 -
对于大型数据集,使用
LIKE
进行模糊匹配可能会影响查询性能。在这种情况下,考虑使用全文搜索功能(如果可用)或优化你的数据库结构和查询策略。 -
在某些情况下,你可能需要使用
ESCAPE
子句来定义转义字符,以便在模式中包含%
、_
或其他特殊字符作为文字字符。例如,如果你想要搜索包含%
字符的字符串,你可以这样做:SELECT * FROM customers WHERE name LIKE '25\% off%' ESCAPE '\';
在这个例子中,
\
被定义为转义字符,所以\%
表示一个文字%
字符。
REGEXP
和 RLIKE
在MySQL中,REGEXP
和RLIKE
是等价的,它们都用于执行正则表达式匹配。这两个操作符可以在WHERE
子句中用来搜索列中符合特定正则表达式模式的字符串。
语法
SELECT column_name(s)
FROM table_name
WHERE column_name REGEXP pattern;
-- 或者
SELECT column_name(s)
FROM table_name
WHERE column_name RLIKE pattern;
在这里,pattern
是一个正则表达式,用于定义要搜索的模式。
示例
假设你有一个名为employees
的表,其中包含名为email
的列,你想要找到所有电子邮件地址以"gmail.com"结尾的员工,你可以这样写:
SELECT *
FROM employees
WHERE email REGEXP 'gmail\.com$';
-- 或者
SELECT *
FROM employees
WHERE email RLIKE 'gmail\.com$';
注意,在正则表达式中,.
是一个特殊字符,它匹配除换行符之外的任何单个字符。因此,如果你想要匹配文字.
字符,你需要使用反斜杠\
来对其进行转义。同样,$
是一个特殊字符,它匹配字符串的末尾。
正则表达式功能
MySQL的正则表达式功能相当强大,支持多种元字符和模式修饰符。以下是一些常用的正则表达式元字符:
.
匹配除换行符之外的任何单个字符。^
匹配字符串的开始。$
匹配字符串的末尾。|
逻辑“或”操作符。*
匹配前面的子表达式零次或多次。+
匹配前面的子表达式一次或多次。?
匹配前面的子表达式零次或一次。{n}
n 是一个非负整数。匹配确定的 n 次。{n,}
n 是一个非负整数。至少匹配n 次。{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。[xyz]
字符集合。匹配所包含的任意一个字符。[^xyz]
负值字符集合。匹配未包含的任意字符。\s
任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
。\S
任何非空白字符。等价于[^ \f\n\r\t\v]
。\d
匹配一个数字字符。等价于[0-9]
。\D
匹配一个非数字字符。等价于[^0-9]
。\w
匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]
。\W
匹配任何非单词字符。等价于[^A-Za-z0-9_]
。
常见的正则表达式
常见的正则表达式涵盖了多个方面,包括校验数字、校验字符、特殊需求等。
校验数字的表达式
- 数字:
^[0-9]*$
。匹配任意个数字,包括0个。 - n位的数字:
^\d{n}$
。其中n表示具体的位数,例如\d{8}
表示8位数字。 - 至少n位的数字:
^\d{n,}$
。 - m-n位的数字:
^\d{m,n}$
。 - 零和非零开头的数字:
^(0|[1-9][0-9]*)$
。 - 非零开头的最多带两位小数的数字:
^([1-9][0-9]*)+(\.[0-9]{1,2})?$
。 - 带1-2位小数的正数或负数:
^(\-)?\d+(\.\d{1,2})?$
。 - 正数、负数、和小数:
^(\-|\+)?\d+(\.\d+)?$
。 - 有两位小数的正实数:
^[0-9]+(\.[0-9]{2})?$
。 - 有1~3位小数的正实数:
^[0-9]+(\.[0-9]{1,3})?$
。 - 非零的正整数:
^[1-9]\d*$
或^([1-9][0-9]*){1,3}$
或^\+?[1-9][0-9]*$
。 - 非零的负整数:
^\-[1-9]\d*$
。 - 非负整数:
^\d+$
或^[1-9]\d*|0$
。 - 非正整数:
^-[1-9]\d*|0$
或^((-\d+)|(0+))$
。 - 非负浮点数:
^\d+(\.\d+)?$
或^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
。 - 非正浮点数:
^((-\d+(\.\d+)?)|(0+(\.0+)?))$
或^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
。 - 正浮点数:
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
或^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
。 - 负浮点数:
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$
或^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
。 - 浮点数:
^(-?\d+)(\.\d+)?$
或^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
。
校验字符的表达式
- 汉字:
^[\u4e00-\u9fa5]{0,}$
。 - 长度为3-20的所有字符:
^.{3,20}$
。 - 由26个英文字母组成的字符串:
^[A-Za-z]+$
。 - 由26个大写英文字母组成的字符串:
^[A-Z]+$
。 - 由26个小写英文字母组成的字符串:
^[a-z]+$
。 - 由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
。 - 由数字、26个英文字母或者下划线组成的字符串:
^\w+$
或^\w{3,20}$
。 - 中文、英文、数字包括下划线:
^[\u4E00-\u9FA5A-Za-z0-9_]+$
。 - 中文、英文、数字但不包括下划线等符号:
^[\u4E00-\u9FA5A-Za-z0-9]+$
或^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
。 - **可以输入含有^%&',;=?KaTeX parse error: Expected group after '^' at position 11: \"等字符**:`[^̲%&',;=?\x22]+`。
- 禁止输入含有~的字符:
[^~\x22]+
。
特殊需求表达式
- Email地址:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
。 - 域名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
。 - Internet URL:
[a-zA-z]+://[^\s]*
或^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
。 - 手机号码(以中国大陆为例):
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
。 - 电话号码(包括多种格式):
^(\(\d{3,4}-)|\d{3,4}-)?\d{7,8}$
。 - 国内电话号码(包括区号):
\d{3}-\d{8}|\d{4}-\d{7}
。 - 身份证号(15位或18位数字):
^\d{15}|\d{18}$
。 - 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
。 - 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
^[a-zA-Z]\w{5,17}$
。 - 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
。
以上是一些常见的正则表达式示例,它们可以应用于各种编程和数据处理场景,以实现对文本数据的校验和提取。
注意事项
- 正则表达式匹配是区分大小写的,但你可以使用
REGEXP_LIKE()
函数(在MySQL 8.0及更高版本中可用)并指定一个不区分大小写的匹配模式。 - 对于复杂的正则表达式或大型数据集,使用
REGEXP
或RLIKE
可能会影响查询性能。在这种情况下,考虑使用其他查询策略或优化你的数据库结构。 - 不同的数据库系统(如PostgreSQL、Oracle、SQL Server等)可能支持不同的正则表达式语法和函数。因此,在将查询从一个系统迁移到另一个系统时,请务必检查相应的文档。
这些比较运算符是SQL查询的基础,它们允许你根据几乎任何条件来筛选数据。在编写查询时,理解并熟练使用这些运算符非常重要。