【重学 MySQL】十七、比较运算符的使用

【重学 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】十七、比较运算符的使用_第1张图片

MySQL中的比较运算符用于在查询中比较两个表达式的大小、相等性或其他条件关系。这些运算符非常基础且重要,因为它们允许你根据特定条件过滤数据。

等于(=

在MySQL中,等号运算符(=)用于比较两个值是否相等。如果两边的值相等,则表达式的结果为TRUE;否则,结果为FALSE。等号运算符在SELECT语句的WHERE子句中非常常见,用于筛选满足特定条件的记录。

基本用法

SELECT column_name(s)
FROM table_name
WHERE column_name = value;

这里,column_name是你想要比较的列名,table_name是表名,而value是你想要与列中的值进行比较的值。

示例

假设有一个名为employees的表,其中包含idnamesalary等列,你想找出薪资为5000的所有员工:

SELECT *
FROM employees
WHERE salary = 5000;

这个查询会返回salary列中值为5000的所有行的数据。

注意事项

  • 当比较字符串时,MySQL默认是不区分大小写的(这取决于字符集的校对规则)。但是,你可以通过指定二进制校对规则(如_bin)来使比较区分大小写。
  • 在与NULL进行比较时,使用等号运算符(=)是无效的,因为任何与NULL的比较操作都会返回NULL,而不是TRUEFALSE。要检查NULL值,应使用IS NULLIS 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的表,其中包含idnamegrade等列,我们想要找出所有成绩不等于90分的学生:

使用<>运算符:

SELECT *
FROM students
WHERE grade <> 90;

或者使用!=运算符:

SELECT *
FROM students
WHERE grade != 90;

这两个查询都会返回grade列中值不等于90的所有行的数据。

注意事项

  • 当与NULL值进行比较时,<>!=运算符的行为是一致的。任何与NULL的比较操作(除了IS NULLIS NOT NULL)都会返回NULL,而不是TRUEFALSE。因此,如果你想要检查某个列的值是否不是NULL,你应该使用IS NOT NULL
  • 在编写SQL查询时,选择<>还是!=主要取决于个人偏好和团队的编码规范。然而,需要注意的是,在某些情况下(特别是在与其他编程语言或框架的集成中),这两个运算符的可用性可能会有所不同。
  • 在某些SQL方言或特定版本的数据库系统中,这两个运算符的支持程度可能略有不同,但在大多数情况下,它们都是可互换使用的。

总的来说,<>!=是MySQL中用于表示不等于的两种等效运算符,你可以根据自己的喜好和项目的需求来选择使用哪一个。

大于(>)、大于等于(>=)、小于(<)、小于等于(<=

在MySQL中,大于(>)、大于等于(>=)、小于(<)和小于等于(<=)是基本的比较运算符,用于在SQL查询的WHERE子句中比较列的值与指定的值或表达式。这些运算符允许你根据列的值筛选出满足特定条件的记录。

大于(>

大于运算符(>)用于比较两个值,以确定左边的值是否大于右边的值。如果左边的值大于右边的值,则表达式的结果为TRUE;否则,结果为FALSE

示例

假设我们有一个名为sales的表,其中包含dateamount等列,我们想要找出所有销售额大于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 NULLIS NOT NULL

在MySQL中,IS NULLIS 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 NULLIS NOT NULL 是条件表达式,用于在WHERE子句中过滤出NULL值或非NULL值的记录。

LEASTGREATEST

在MySQL中,LEASTGREATEST 是两个非常有用的函数,它们允许你在一组值中找出最小或最大的值。这两个函数可以接受两个或更多的参数,并返回参数列表中的最小或最大值。

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值

注意事项

  • LEASTGREATEST的参数中包含字符串时,比较是基于字符串的字典顺序进行的。这意味着,如果你混合了数字和字符串作为参数,结果可能会与你期望的不同,特别是当字符串看起来像数字时。
  • 如果需要确保比较是基于数值的,确保所有参数都是数值类型,或者在使用之前将字符串参数转换为数值类型。
  • LEASTGREATEST函数在数据分析和处理中非常有用,特别是在需要动态地选择一组值中的最小或最大值时。

BETWEEN AND

在MySQL中,BETWEEN AND是一个在查询中指定范围搜索的条件。它允许你选择一个字段的值在指定的两个值之间的所有记录(包括边界值)。这个条件对于过滤数据非常有用,特别是当你想要检索一个字段在某个范围内的所有行时。

语法

SELECT column_names
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
  • column_names 是你想要从表中检索的列名。
  • table_name 是包含数据的表名。
  • column_name 是你想要应用范围搜索的列名。
  • value1value2 定义了搜索范围的下限和上限。column_name 的值必须在这个范围内(包括value1value2)。

注意事项

  • value1 应该小于或等于 value2。如果 value1 大于 value2,则查询可能不会返回任何结果,因为不存在一个数同时大于某个数且小于另一个较小的数。
  • BETWEEN AND 包括边界值。也就是说,如果列的值等于 value1value2,那么相应的行也会被检索出来。
  • 你可以使用日期、数字或字符串(尽管对于字符串,比较是基于字典顺序的,可能不是你想要的)作为 value1value2

示例

假设我们有一个名为orders的表,其中包含order_idorder_dateamount等列。如果我们想要找出所有在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’之间(包括这两个日期)的所有行的数据。

INNOT IN

在MySQL中,INNOT 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的所有员工的记录。

注意事项

  • 当使用INNOT IN时,列表中的值可以是数字、字符串或日期等数据类型,但重要的是要确保这些值与你要比较的字段的数据类型相匹配。
  • 如果列表中包含NULL值,则INNOT IN的行为可能会与你的预期不同。特别是,column_name IN (NULL, ...)永远不会为真,因为任何值与NULL的比较操作都会返回NULL,而不是TRUE或FALSE。因此,如果你的值列表中可能包含NULL,你可能需要重新考虑你的查询策略。
  • 对于包含大量值的列表,使用INNOT 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 '\';
    

    在这个例子中,\被定义为转义字符,所以\%表示一个文字%字符。

REGEXPRLIKE

在MySQL中,REGEXPRLIKE是等价的,它们都用于执行正则表达式匹配。这两个操作符可以在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_]

常见的正则表达式

常见的正则表达式涵盖了多个方面,包括校验数字、校验字符、特殊需求等。

校验数字的表达式

  1. 数字^[0-9]*$。匹配任意个数字,包括0个。
  2. n位的数字^\d{n}$。其中n表示具体的位数,例如\d{8}表示8位数字。
  3. 至少n位的数字^\d{n,}$
  4. m-n位的数字^\d{m,n}$
  5. 零和非零开头的数字^(0|[1-9][0-9]*)$
  6. 非零开头的最多带两位小数的数字^([1-9][0-9]*)+(\.[0-9]{1,2})?$
  7. 带1-2位小数的正数或负数^(\-)?\d+(\.\d{1,2})?$
  8. 正数、负数、和小数^(\-|\+)?\d+(\.\d+)?$
  9. 有两位小数的正实数^[0-9]+(\.[0-9]{2})?$
  10. 有1~3位小数的正实数^[0-9]+(\.[0-9]{1,3})?$
  11. 非零的正整数^[1-9]\d*$^([1-9][0-9]*){1,3}$^\+?[1-9][0-9]*$
  12. 非零的负整数^\-[1-9]\d*$
  13. 非负整数^\d+$^[1-9]\d*|0$
  14. 非正整数^-[1-9]\d*|0$^((-\d+)|(0+))$
  15. 非负浮点数^\d+(\.\d+)?$^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
  16. 非正浮点数^((-\d+(\.\d+)?)|(0+(\.0+)?))$^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
  17. 正浮点数^[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]*))$
  18. 负浮点数^-([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]*)))$
  19. 浮点数^(-?\d+)(\.\d+)?$^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

校验字符的表达式

  1. 汉字^[\u4e00-\u9fa5]{0,}$
  2. 长度为3-20的所有字符^.{3,20}$
  3. 由26个英文字母组成的字符串^[A-Za-z]+$
  4. 由26个大写英文字母组成的字符串^[A-Z]+$
  5. 由26个小写英文字母组成的字符串^[a-z]+$
  6. 由数字和26个英文字母组成的字符串^[A-Za-z0-9]+$
  7. 由数字、26个英文字母或者下划线组成的字符串^\w+$^\w{3,20}$
  8. 中文、英文、数字包括下划线^[\u4E00-\u9FA5A-Za-z0-9_]+$
  9. 中文、英文、数字但不包括下划线等符号^[\u4E00-\u9FA5A-Za-z0-9]+$^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  10. **可以输入含有^%&',;=?KaTeX parse error: Expected group after '^' at position 11: \"等字符**:`[^̲%&',;=?\x22]+`。
  11. 禁止输入含有~的字符[^~\x22]+

特殊需求表达式

  1. Email地址^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  2. 域名[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
  3. Internet URL[a-zA-z]+://[^\s]*^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
  4. 手机号码(以中国大陆为例):^(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}$
  5. 电话号码(包括多种格式):^(\(\d{3,4}-)|\d{3,4}-)?\d{7,8}$
  6. 国内电话号码(包括区号):\d{3}-\d{8}|\d{4}-\d{7}
  7. 身份证号(15位或18位数字):^\d{15}|\d{18}$
  8. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  9. 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
  10. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

以上是一些常见的正则表达式示例,它们可以应用于各种编程和数据处理场景,以实现对文本数据的校验和提取。

注意事项

  • 正则表达式匹配是区分大小写的,但你可以使用REGEXP_LIKE()函数(在MySQL 8.0及更高版本中可用)并指定一个不区分大小写的匹配模式。
  • 对于复杂的正则表达式或大型数据集,使用REGEXPRLIKE可能会影响查询性能。在这种情况下,考虑使用其他查询策略或优化你的数据库结构。
  • 不同的数据库系统(如PostgreSQL、Oracle、SQL Server等)可能支持不同的正则表达式语法和函数。因此,在将查询从一个系统迁移到另一个系统时,请务必检查相应的文档。

这些比较运算符是SQL查询的基础,它们允许你根据几乎任何条件来筛选数据。在编写查询时,理解并熟练使用这些运算符非常重要。

你可能感兴趣的:(重学MySQL,mysql,android,adb)