如果开始不是从0开始,我们是否需要从SUBSTRING长度中删除一些字符?

时间:2018-10-07 14:07:11

标签: sql-server

我碰到了这句话和东西之间的区别

DECLARE @MyStr nvarchar(max) = 'This is a sentence'
SELECT SUBSTRING(@MyStr, 6, LEN(@MyStr)**-5**)

DECLARE @MyStr nvarchar(max) = 'This is a sentence'
SELECT SUBSTRING(@MyStr, 6, LEN(@MyStr))

我同时运行了两者,后者不添加任何空格或任何内容。

1 个答案:

答案 0 :(得分:0)

SUBSTRING的第三个参数是要采用的子字符串的长度。在第一个示例中,长度恰好覆盖了字符串的其余部分。在第二个示例中,长度超出了字符串的实际可用长度(5个字符)。关于长度大于可用长度会发生什么,我们可以转到documentation for SUBSTRING

  

长度
  是一个正整数或bigint表达式,它指定将返回多少个字符。如果length为负数,则生成错误并终止该语句。 如果开始和长度的总和大于表达式中的字符数,则返回从开始处开始的整个值表达式。

换句话说,如果length参数加上传递的起始值大于可用参数,则SUBSTRING仅返回可用参数。