📅  最后修改于: 2023-12-03 15:39:48.275000             🧑  作者: Mango
在 SQL 中,我们经常需要查询某一列中包含特定子字符串的数据。这种情况下,我们可以使用子字符串函数和通配符来实现按列查询子字符串的功能。
在 SQL 中,通配符用来匹配模式,常见的通配符有:
%
:匹配任何字符串,包括空字符串_
:匹配单个字符在 SQL 中,常用的子字符串函数有:
SUBSTRING(str, pos, len)
:返回 str 中从 pos 开始长度为 len 的子字符串。其中,pos 为子字符串的起始位置(从 1 开始),len 为子字符串的长度。LEFT(str, len)
:返回 str 中左边长度为 len 的子字符串。RIGHT(str, len)
:返回 str 中右边长度为 len 的子字符串。假设我们有一张学生表(student),其中包含 id、name 和 email 三个列。我们想查询 email 列中包含 "@gmail.com" 子字符串的学生信息。
-- 使用 LIKE 和 % 通配符查询
SELECT * FROM student WHERE email LIKE '%@gmail.com%';
为了查询 email 列中包含某个子字符串,我们可以使用 LIKE 关键字和 % 通配符。这种方式可以匹配 email 列中任意位置包含 '@gmail.com' 的字符串。但是,如果我们只想查询 email 列中以 '@gmail.com' 结尾的字符串,该怎么办呢?
-- 使用 RIGHT 和 = 语句查询
SELECT * FROM student WHERE RIGHT(email, 10) = '@gmail.com';
这里我们使用了 RIGHT 函数来获取 email 列中右边长度为 10(即 '@gmail.com' 的长度)的子字符串,然后使用 = 语句查询该子字符串是否等于 '@gmail.com'。如果是,就返回该行数据。
另外,在某些场景下,我们可能需要查询列中某个子字符串的位置。这时可以使用 CHARINDEX 函数,它返回子字符串在字符串中的起始位置(从 1 开始)。例如,我们想查询 email 列中 '@' 字符在字符串中的位置:
-- 使用 CHARINDEX 函数查询
SELECT id, name, CHARINDEX('@', email) AS at_position FROM student;
这里我们使用 CHARINDEX 函数查询 '@' 在 email 列中的位置,并将结果保存为一个别名为 at_position 的列。这样,我们就可以通过 at_position 列来筛选符合条件的数据了。
按列查询子字符串是 SQL 中常见的操作之一,在实际应用中非常有用。我们可以使用通配符和子字符串函数来实现不同的查询需求,从而便捷地提取出需要的数据。