是否有更好的一般解决方案。
组成。
在给定的字符串中,是否有一种已建立的,规范的"最佳"方法以从特定的索引开始并继续到字符串的末尾?p>"最佳"在这里意味着以下注意事项的平衡:
- 最有效的性能
- 最容易让开发人员阅读和理解
- 最短/最容易记住的而不必查找语法
在这些示例中使用2
作为启动子字符串的索引:
SUBSTRING(mystring, 2, 1000000)
- 来源:https://stackoverflow.com/a/8302533/12484
- con:使用"魔术号"
1000000
(可能是任何"足够大"值)似乎并不理想。 - con:我的代码遇到的字符串比该值更长?
。
SUBSTRING(mystring, 2, 2147483647)
- con:没有内置常数可以代替"最大int"值。
- con:"最大int"值很难记住,并且每次都必须去谷歌。
- con:即使假设我们在谈论
varchar(max)
或nvarchar(max)
,字符串长度可能会超过该大小,具体取决于SQL Server版本?
。
SUBSTRING(mystring, 2, LEN(mystring) - 2 + 1)
- con:此语法有些麻烦。
。
RIGHT(mystring, LEN(mystring) - 2 + 1)
- con:这仍然很麻烦。
。
SUBSTRING(mystring, 2, LEN(mystring))
- con:根据文档,"长度"参数具有超过字符串末端的值是可以的,但是最初,这可能是对开发人员阅读此内容的可能索引范围的错误代码(直到他们还查找文档并看到此方法还可以)?
考虑到我上面提到的考虑因素(性能,可读性,易用性)?
正如我在评论中提到的,您可以使用的另一个选项是
STUFF(mystring, 1,2,'')
这应该易于理解,并记住开发人员。
SUBSTRING(mystring, 2, LEN(mystring) - 2 + 1)
这绝对是我这样做的首选方法。即使"规范"也可以超出substring()函数中字符串长度的范围,最好不要。如果您担心与语法的混乱,只需将列以说明的评论序列。实际上,无论如何,我可能会用评论来序言,以解释为什么我使用substring以及我预期的子字符串由