SQL字符串包含

介绍
在编写SQL查询语句时,经常需要根据某个字段的值是否包含特定的字符串来进行筛选。在这篇文章中,我们将详细介绍在不同数据库中如何使用SQL查询字符串包含的方法。我们将首先讨论在常见的关系型数据库中的基本语法,然后给出一些示例代码并展示运行结果。
MySQL中的字符串包含
在MySQL中,我们可以使用LIKE关键字来进行字符串包含的筛选。LIKE操作符可以与通配符一起使用,常见的通配符包括%和_。
%通配符
%通配符表示任意个字符(包括0个字符)。我们可以使用%通配符来模糊匹配某个字符串的一部分。
示例1:筛选出名字以li开头的用户。
SELECT *
FROM users
WHERE name LIKE 'li%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | lily |
| 2 | lisa |
| 6 | lilytom |
+------+----------+
示例2:筛选出名字中包含ll的用户。
SELECT *
FROM users
WHERE name LIKE '%ll%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | lily |
| 3 | william |
| 6 | lilytom |
+------+----------+
_通配符
_通配符表示一个字符。我们可以使用_通配符来匹配某个字符串中的单个字符。
示例3:筛选出名字第二个字母为i的用户。
SELECT *
FROM users
WHERE name LIKE '_i%';
结果:
+------+----------+
| id | name |
+------+----------+
| 2 | lisa |
+------+----------+
特殊字符的转义
在使用LIKE操作符时,如果要搜索的字符串中包含有 % 或 _ 字符时,我们需要使用转义字符 \ 来表示这些特殊字符。
示例4:筛选出包含%的用户名。
SELECT *
FROM users
WHERE name LIKE '%\%%';
结果:
+------+---------+
| id | name |
+------+---------+
| 4 | mike% |
| 5 | jack% |
+------+---------+
PostgreSQL中的字符串包含
在PostgreSQL中,我们可以使用LIKE操作符来进行字符串包含的筛选,与MySQL中的用法基本相同。但需要注意的是,PostgreSQL不区分大小写,默认情况下对大小写是敏感的,所以在进行字符串包含的筛选时需要使用合适的大小写。
示例5:筛选出名字以Li开头的用户。
SELECT *
FROM users
WHERE name LIKE 'Li%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | Lily |
| 6 | LilyTom |
+------+----------+
示例6:筛选出名字中包含LL的用户。
SELECT *
FROM users
WHERE name LIKE '%LL%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | Lily |
+------+----------+
示例7:筛选出名字中包含IL或LL的用户。
SELECT *
FROM users
WHERE name LIKE '%[I|L]L%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | Lily |
| 6 | LilyTom |
+------+----------+
Oracle中的字符串包含
在Oracle中,我们可以使用LIKE和REGEXP_LIKE关键字来进行字符串包含的筛选。LIKE操作符的用法与MySQL和PostgreSQL中的用法基本相同,而REGEXP_LIKE操作符则可以使用正则表达式来进行更为复杂的筛选。在这里,我们只介绍LIKE操作符的用法。
示例8:筛选出名字以li开头的用户。
SELECT *
FROM users
WHERE name LIKE 'li%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | lily |
| 2 | lisa |
| 6 | lilytom |
+------+----------+
示例9:筛选出名字中包含ll的用户。
SELECT *
FROM users
WHERE name LIKE '%ll%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | lily |
| 3 | william |
| 6 | lilytom |
+------+----------+
SQL Server中的字符串包含
在SQL Server中,我们可以使用LIKE和PATINDEX函数来进行字符串包含的筛选。LIKE操作符的用法与MySQL、PostgreSQL和Oracle中的用法基本相同,而PATINDEX则可以使用类似正则表达式的模式来进行筛选。
示例10:筛选出名字以l开头的用户。
SELECT *
FROM users
WHERE name LIKE 'l%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | lily |
| 6 | lilytom |
+------+----------+
示例11:筛选出名字中包含li的用户。
SELECT *
FROM users
WHERE name LIKE '%li%';
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | lily |
| 2 | lisa |
| 6 | lilytom |
+------+----------+
示例12:筛选出名字中包含li或to的用户。
SELECT *
FROM users
WHERE PATINDEX('%[l|t][i|o]%', name) > 0;
结果:
+------+----------+
| id | name |
+------+----------+
| 1 | lily |
| 2 | lisa |
| 6 | lilytom |
+------+----------+
总结
本文我们介绍了在常见的关系型数据库中如何使用SQL查询字符串包含的方法。我们详细讨论了MySQL、PostgreSQL、Oracle和SQL Server中的关键字和函数,并给出了相应的示例代码和运行结果。
极客笔记