在T-SQL中为子字符串长度参数指定字符串长度

时间:2016-03-21 17:00:51

标签: sql-server tsql

根据这篇msdn文章并使用子字符串:

q

  

length_expression

     

是一个正整数或bigint表达式,指定了多少个   将返回value_expression的字符。如果   length_expression为负数,生成错误和语句   被终止。 如果start_expression和length_expression的总和是   大于value_expression中的字符数,整数   返回从start_expression开始的值表达式。

所以,如果我有:

SUBSTRING (value_expression ,start_expression ,length_expression )

我的理解是因为DECLARE @data varchar(max) SELECT TOP 1 @data = Data FROM [SomeDatabase].[dbo].[MyTable] SELECT SUBSTRING(@data, 10, LEN(@data)) 发现所要求的长度超过了提供的字符串的长度,它将从 start_index 返回所有内容,直到字符串结束为止服用。

例如:if:

SUBSTRING

这应该返回@data = "hey there"; // char length of 9 SUBSTRING(@data, 4, 20)

这是一件特别糟糕的事吗?

这样做有什么警告吗?

我应该明确要返回的字符串长度吗?

1 个答案:

答案 0 :(得分:-1)

是的,这很糟糕。因为,如果您将来更改该表并且该字段可能包含超过20个字符的数据,那么您的逻辑将是错误的。

或者如果它是一个程序,你不能假设数据len,总是小于20。