【问题标题】:Is there a way to get the Nth index of a specified char in T-SQL? (Without Substring!)有没有办法在 T-SQL 中获取指定字符的第 N 个索引? (没有子字符串!)
【发布时间】:2010-08-06 23:04:35
【问题描述】:

我正在尝试获取 varchar(MAX) 中第 N 个字符的索引。现在我正在切断 varchar 的前端,所以我只需要检查第一个,但是对于非常大的 varchar,这个过程变得太慢了。我想解析 varchar(max) 并跟踪我所在的索引并在该索引之后获取我想要的下一个字符。如果我可以做到这一点而不必不断地切断大 varchar 的前面,我认为它会大大提高性能。谢谢。

编辑: 现在要解析大量文本,我使用 CHARINDEX 来获取 char 的索引,然后我 SUBSTRING 文本以删除第一个索引。现在我再次调用 CHARINDEX(它有效地检索文本中该字符的第二个索引)。但是,这个 SUBSTRINGING 对系统来说非常繁重,我想避免它。

编辑:啊,抱歉我的标题误导了,现在应该更直接了。

【问题讨论】:

  • 嗯...N'th 字符的索引是N-1。能举个例子吗?
  • 对不起,我应该花更多的时间来阐述。现在要解析大量文本,我使用 CHARINDEX 来获取 char 的索引,然后我 SUBSTRING 文本以删除第一个索引。现在我再次调用 CHARINDEX(它有效地检索文本中该字符的第二个索引)。但是,这个 SUBSTRINGING 对系统来说非常繁重,我想避免它。

标签: sql tsql string


【解决方案1】:

T-SQL 中内置的字符串函数相当有限。您需要结合 SUBSTRING()、CHARINDEX()、STRPOS() 来执行此操作,但这不是快速操作。

您也可以使用计数表。

但我认为最好的方法是使用 CLR 过程来完成像您这样的任务。它将更加高效和快速。

【讨论】:

  • 我明白了,原来是这样的,但我希望能够将其设为存储过程,以便将来可以轻松编辑。谢谢。
【解决方案2】:

在进行程序工作(相对于基于集合工作)时提高性能的一种方法是使用CLR Integration with SQL Server。在询问有关性能的问题时,我从Chris Lively in this answer 得到了这个提示。虽然我自己没有测试过,但关于 CLR 与 SQL 服务器集成的文档表明,对于过程操作,CLR 比 T-SQL 性能要好得多。但是,对于基于集合的操作,请使用 T-SQL。

【讨论】:

    【解决方案3】:

    我认为CHARINDEXSUBSTRING 函数可以解决您的问题。

    【讨论】:

    • SUBSTRING,正如我在文中提到的,是令人难以置信的运行时间陷入困境的原因。我想在没有 SUBSTRING 的情况下执行此操作。
    • @danp:问题已编辑,没有关于 SUBSTRING 或 CHARINDEX 的内容。不过,谢谢你 -1。
    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 2020-01-31
    • 2018-04-17
    • 2020-04-17
    • 2021-10-04
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多