SQL Server 中的 substring() 函数:如何使用(附示例)
⚡ 智能摘要
SQL Server 中的 SUBSTRING() 函数示例tracts 是字符、文本或二进制表达式的一部分,从选定的起始位置返回一定数量的字符,并且自然地与 CHARINDEX 配对,用于基于分隔符的解析。
什么是 Substring()?
SUBSTRING() 是一个函数 SQL 允许用户根据需要从任何给定字符串中提取子字符串。SUBSTRING() 示例tracSUBSTRING() 函数用于从输入字符串的指定位置开始,截取指定长度的字符串。SQL 中的 SUBSTRING() 函数的目的是返回字符串的特定部分。
Substring() 的语法
SUBSTRING(Expression, Starting Position, Total Length)
这里:
- SUBSTRING() 表达式 SQL服务器 可以是任何字符、二进制数据、文本或图像。表达式是要从中提取子字符串的源字符串。
- 起始位置决定了新子字符串在表达式中的起始位置。
- 总长度是指从起始位置开始,表达式产生的子字符串的预期总长度。
SUBSTRING() 的使用规则
- MS SQL SUBSTRING() 函数中的所有三个参数都是必需的。
- 如果起始位置大于表达式中的最大字符数,则 SQL Server 中的 SUBSTRING() 函数不会返回任何内容。
- 总长度可以超过原始字符串的最大字符长度。在这种情况下,生成的子字符串是整个字符串,从表达式中的起始位置开始,直到表达式的最后一个字符为止。
下图展示了 SQL Server 中 SUBSTRING() 函数的用法:
T-SQL 子字符串示例
假设:假设我们有一个名为“Guru99',两列四行,如下所示。我们将使用这个'Guru以下示例中的 99' 表格:
问题 1: 在 SQL 中使用 SUBSTRING() 函数,但结果长度小于表达式的最大总长度。
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
结果:下图显示了“Tutorial_name”列的子字符串,该子字符串被标记为“SUB”列。起始位置为1,长度为2,因此返回前两个字符:
问题 2: 在 SQL Server 中使用 SUBSTRING() 函数,长度大于表达式的最大总长度。
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
结果:下图将“Tutorial_name”列的子字符串显示为“SUB”列。即使子字符串的长度大于表达式的最大总长度,也不会引发错误,查询会返回从起始位置开始的完整字符串:
SQL Server 中使用 CHARINDEX 进行子字符串操作
SUBSTRING() 函数在现实世界中一个非常常见的用途是……trac字符串中位于分隔符(例如电子邮件地址中的域名)之前或之后的文本。SUBSTRING() 函数本身需要一个固定的起始位置,但分隔符的位置会随行而变化。CHARINDEX() 函数通过返回字符串中字符的位置来解决这个问题:
CHARINDEX(substring_to_find, expression [, start_location])
通过将 CHARINDEX() 嵌套在 SUBSTRING() 中,起始位置变为动态的。下面的示例查找…… @ 符号并返回其后的所有内容。 变量 包含样本值:
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
这里,CHARINDEX('@', @Email) 定位 @ 符号的位置,加 1 则向后移动一个字符,然后 SUBSTRING() 函数会提取 @ 符号后面的内容。tracts 剩余字符。对于上述值,查询返回域 大师99.comCHARINDEX 加 SUBSTRING 模式是 T-SQL 中解析结构化字符串的标准方法。
SQL Server 中的 SUBSTRING 与 LEFT 和 RIGHT 函数
SQL Server 还提供了 LEFT() 和 RIGHT() 函数,用于从字符串的开头或结尾提取字符。它们写起来更简洁,但只能从字符串的开头或结尾提取字符。SUBSTRING() 函数最为灵活,因为它可以从任意位置开始提取字符。下表对它们进行了比较:
| 功能 | 参数 | Extrac来自 ts | 等效的 SUBSTRING() |
| LEFT(表达式, n) | 2 | 字符串的开头 | 子字符串(表达式, 1, n) |
| 右(表达式,n) | 2 | 字符串结束 | SUBSTRING(表达式, LEN(表达式) – n + 1, n) |
| SUBSTRING(表达式, 起始位置, 长度) | 3 | 任意位置 | 不适用 |
简而言之,LEFT() 和 RIGHT() 是用于获取字符串末尾字符的便捷快捷方式,而 SUBSTRING() 则处理一般情况,包括从字符串中间提取字符。
子字符串中的负数、零和 NULL 参数
除了基本规则之外,了解 SUBSTRING() 函数在边界处的行为也很有帮助。当起始位置为零或负数时,SQL Server 会计算有效长度 (start + length – 1) 并从位置 1 开始读取。当任何参数为 NULL 时,结果也为 NULL。下表已根据官方文档验证。 子字符串(Transact-SQL) 参考资料中列举了以下案例:
| 电话联系 | 成果 | 原因 |
| 子字符串('Guru99',1,4) | Guru | 正常调用:从位置 1 开始的四个字符。 |
| 子字符串('Guru99',0,3) | Gu | 从下方开始:有效长度为 0 + 3 – 1 = 2。 |
| 子字符串('Guru99',4,100) | u99 | 字符串长度超过指定值时,返回剩余部分,不报错。 |
| 子字符串('Guru99',3,NULL) | 无 | NULL 参数会使整个结果为 NULL。 |
了解这些特殊情况可以避免在从另一列或其他列计算起始位置时出现意外情况。 变量 该值可能为零或 NULL。





