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

时间:2017-09-15 15:13:43

标签: sql sql-server

在SQL Server中,给定一个字符串,是否存在已建立的,规范的"最佳"从特定索引开始获取子串的方法,并继续到字符串的结尾?

"最佳"这里意味着以下考虑因素的平衡:

  • 最有效的表现
  • 开发人员阅读和理解最简单
  • 最短/最容易记住而无需查找语法

我遇到过这样做的方法,在这些示例中使用2作为启动子字符串的索引:

SUBSTRING(mystring, 2, 1000000)
  • 来源:https://stackoverflow.com/a/8302533/12484
  • Con:使用"幻数" 1000000(可能是任何"足够大"值)似乎并不理想。
  • Con:我的代码遇到的字符串长于该值?

SUBSTRING(mystring, 2, 2147483647)

SUBSTRING(mystring, 2, LEN(mystring) - 2 + 1)
  • Con:这种语法有些麻烦。

RIGHT(mystring, LEN(mystring) - 2 + 1)
  • Con:这仍然相当麻烦。

SUBSTRING(mystring, 2, LEN(mystring))
  • Con:根据docs,"长度"参数有一个超过字符串结尾的值,但这可能最初看起来像是一个可能的索引超出范围的错误给开发人员阅读此代码(直到他们也查找文档,看到这种方法是好的)?

考虑到我上面提到的考虑因素(性能,可读性,易用性),是否有更好的通用解决方案?

2 个答案:

答案 0 :(得分:1)

SUBSTRING(mystring, 2, LEN(mystring) - 2 + 1)

这肯定是我的首选方式。即使"规范"你可以在SUBSTRING()函数中超出字符串长度的范围,最好不要。如果您担心语法混淆,只需在行前面加上注释解释。事实上,我可能会先用注释来解释这种操作,以解释为什么我使用子字符串以及我期望子字符串由

组成

答案 1 :(得分:1)

正如我在评论中提到的,您可以使用的另一个选项是

STUFF(mystring, 1,2,'')

对于开发人员而言,这应该易于理解和记忆。