SQL Server:从特定索引到字符串末端获取子字符串的规范方法



在给定的字符串中,是否有一种已建立的,规范的"最佳"方法以从特定的索引开始并继续到字符串的末尾?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以及我预期的子字符串由

组成。

最新更新