Sql server 为T-SQL中的子字符串长度参数指定字符串长度
根据本文并使用子字符串:Sql server 为T-SQL中的子字符串长度参数指定字符串长度,sql-server,tsql,Sql Server,Tsql,根据本文并使用子字符串: 子字符串(值表达式、开始表达式、长度表达式) 长度表达式 是一个正整数或bigint表达式,用于指定 将返回值\表达式的字符。如果 长度_表达式为负数,将生成一个错误并返回语句 终止如果开始表达式和长度表达式之和为 大于value_表达式中的字符数,则整个 返回从开始处开始的值表达式\u表达式。 如果我有: DECLARE @data varchar(max) SELECT TOP 1 @data = Data FROM [SomeDatabase].[dbo
子字符串(值表达式、开始表达式、长度表达式)
长度表达式
是一个正整数或bigint表达式,用于指定
将返回值\表达式的字符。如果
长度_表达式为负数,将生成一个错误并返回语句
终止如果开始表达式和长度表达式之和为
大于value_表达式中的字符数,则整个
返回从开始处开始的值表达式\u表达式。
如果我有:
DECLARE @data varchar(max)
SELECT TOP 1 @data = Data
FROM [SomeDatabase].[dbo].[MyTable]
SELECT SUBSTRING(@data, 10, LEN(@data))
我的理解是,因为子字符串
发现请求的长度大于提供的字符串长度,所以它将返回从开始索引到字符串结束的所有内容
例如,如果:
@data = "hey there"; // char length of 9
SUBSTRING(@data, 4, 20)
这应该返回那里
这是一件特别糟糕的事情吗
这样做有什么警告吗
我应该明确返回字符串的长度吗?我看不出这是件坏事的原因。我倾向于使用len(@string),当我确定的时候,我排除了我不想返回的部分,我想返回所有内容。对我来说,这似乎是合法的,这是一个非常有用的功能,IMHO
子字符串(@data,4,len(@data))
与编写右侧(@data,LEN(@data)-4)几乎相同。
。但是,如果整个字符串长度小于指定的起始字符,RIGHT
将返回一个错误(传递给RIGHT函数的长度参数无效),而SUBSTRING
将返回一个空白,这可能更可取。