根据这篇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)
这是一件特别糟糕的事吗?
这样做有什么警告吗?
我应该明确要返回的字符串长度吗?
答案 0 :(得分:-1)
是的,这很糟糕。因为,如果您将来更改该表并且该字段可能包含超过20个字符的数据,那么您的逻辑将是错误的。
或者如果它是一个程序,你不能假设数据len,总是小于20。