SQL Server 中的 substring() 函数:如何使用(附示例)

⚡ 智能摘要

SQL Server 中的 SUBSTRING() 函数示例tracts 是字符、文本或二进制表达式的一部分,从选定的起始位置返回一定数量的字符,并且自然地与 CHARINDEX 配对,用于基于分隔符的解析。

  • ✂️ 目的: SUBSTRING() 根据源表达式、起始位置和长度返回字符串的特定部分。
  • 🔢 三个论点: 在 SQL Server SUBSTRING() 函数中,表达式、起始位置和总长度都是必需的。
  • 📍 基于 1 的指数: 起始位置从 1 开始,因此第一个字符算作位置 1,这样就避免了差 1 的错误。
  • 🔎 使用 CHARINDEX: 将 SUBSTRING() 函数与 CHARINDEX() 函数结合使用,可以找到分隔符和索引。tracts 是它前面或后面的文本。
  • ↔️ 左与右: 与 LEFT() 和 RIGHT() 不同,SUBSTRING() 函数tracts 字符可以来自任何位置,而不仅仅是末尾。
  • ⚠️ 边缘情况: NULL 长度返回 NULL,而长度超过字符串长度则返回剩余部分,且不引发错误。

SQL Server 中的 SUBSTRING() 函数及 T-SQL 示例

什么是 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() 函数的用法:

图示展示了 SUBSTRING() 函数的用法trac从起始位置开始,给定长度的 ts 个字符

T-SQL 子字符串示例

假设:假设我们有一个名为“Guru99',两列四行,如下所示。我们将使用这个'Guru以下示例中的 99' 表格:

Guru99 个示例表,其中包含 SUBSTRING 示例中使用的 Tutorial_ID 和 Tutorial_name 列。

问题 1: 在 SQL 中使用 SUBSTRING() 函数,但结果长度小于表达式的最大总长度。

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

结果:下图显示了“Tutorial_name”列的子字符串,该子字符串被标记为“SUB”列。起始位置为1,长度为2,因此返回前两个字符:

结果网格返回 Tutorial_name 的前两个字符作为 SUB 列

问题 2: 在 SQL Server 中使用 SUBSTRING() 函数,长度大于表达式的最大总长度。

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

结果:下图将“Tutorial_name”列的子字符串显示为“SUB”列。即使子字符串的长度大于表达式的最大总长度,也不会引发错误,查询会返回从起始位置开始的完整字符串:

当请求的长度超过字符串长度时,结果网格将返回 Tutorial_name 的剩余部分。

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。

常见问题

SQL Server 使用 SUBSTRING() 函数;SUBSTR() 是其中使用的名称。 Oracle 和 MySQL两者都返回字符串的一部分,但 SUBSTRING() 是标准的 Transact-SQL 函数,因此 SUBSTR() 不会在 SQL Server 上运行。

是的。因为 SUBSTRING() 函数会返回一个值,所以它可以出现在 WHERE、SELECT 和 ORDER BY 子句中。使用 SUBSTRING() 进行筛选通常可以避免索引查找,因此对于前缀搜索,使用 LIKE 模式通常更快。

是的,但 SQL Server 会先将值转换为字符串,可能是隐式转换,也可能是通过 CAST 或 CONVERT 函数。此时,起始位置和长度是按字符数计算的,而不是按数字或日期部分计算的,因此请务必仔细格式化值。

三论证形式的行为类似,但细节有所不同。 MySQL 也允许使用 SUBSTR() 函数和负起始位置,而 SQL Server 使用 SUBSTRING() 函数,并使用有效长度规则处理小于 1 的起始位置。

SUBSTRING() 函数返回与其输入相同的数据类型:varchar 表示字符数据,nvarchar 表示 Unicode 文本,varbinary 表示二进制表达式。返回值的长度取决于请求的子字符串,而不是整个源列。

饺子皮ping 在 WHERE 子句中使用 SUBSTRING() 函数查找列会导致谓词不可搜索,因此 SQL Server 无法对该列使用索引查找。对于前缀匹配,使用 LIKE 'value%' 模式通常性能更好。

是的。 GitHub 副驾驶 可以根据自然语言提示编写 SUBSTRING() 和 CHARINDEX() 表达式,包括基于分隔符的解析。运行查询前,务必验证起始位置、长度和从 1 开始的索引。

人工智能和机器学习助手会将简单的英语规则翻译成 SUBSTRING()、CHARINDEX()、LEFT() 和 RIGHT() 函数的组合,提供长度计算建议,并标记差一错误。开发人员会在部署前审核每个建议的正确性。

总结一下这篇文章: