【问题标题】:Charindex() functionality in SQL ServerSQL Server 中的 Charindex() 功能
【发布时间】:2015-10-17 15:28:02
【问题描述】:

谁能解释一下 SQL Server 中 CharIndex() 函数的实际工作原理。我浏览过 MSDN 和其他网站。但读完这些后,我几乎没有怀疑。我能够理解2个参数。但是一旦我们使用第三个参数(开始位置),我就无法理解输出请看下面的例子。

SELECT CHARINDEX('t', 'TechOnTheNet.com', 3);
-- Result: 7

SELECT CHARINDEX('t', 'TechOnTheNet.com', 8);
-- Result: 12

我无法理解上述两个结果为何如此。

【问题讨论】:

标签: sql sql-server string substring charindex


【解决方案1】:

来自CHARIDNEX

开始位置

是开始搜索的整数或 bigint 表达式。如果 start_location 未指定、为负数或为 0,则 搜索从 expressionToSearch 的开头开始。

搜索是从^符号向前的。

SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); -- Result: 7
                         ^---x-------->   

SELECT CHARINDEX('t', 'TechOnTheNet.com', 8); -- Result: 12
                              ^---x--->

【讨论】:

    【解决方案2】:

    charindex 的第三个参数(可选)是搜索的开始位置。

    SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); -- Result: 7
    

    在这种情况下,t 的搜索从 3 开始。但输出将是 t 在原始字符串中的位置。

    您可以看到它与您的其他示例也类似。

    【讨论】:

      【解决方案3】:

      最后一个参数是起始索引,因此它指示它将查找指定字符的第一个字符串位置。输出是指定字符下一次出现的绝对偏移量(从 1 开始)。

      在您的示例中,偏移量 1、7 和 12 处有一个 T 字符(不区分大小写)。该函数返回大于或等于指定起始偏移量的第一个匹配项。

      【讨论】:

        【解决方案4】:

        第 3 个参数是起始位置,因此在此点之前的任何匹配模式都将被跳过。

        所以在你的例子中:-

        SELECT CHARINDEX('t', 'TechOnTheNet.com', 3)
        

        起始位置为 3,因此跳过第一个 't' 并返回从位置 7 开始的下一个。

        SELECT CHARINDEX('t', 'TechOnTheNet.com', 8)
        

        起始位置是 8,因此 't' 的第一个和第二个实例被跳过并返回从位置 12 开始的下一个实例。

        【讨论】:

          【解决方案5】:

          你提到你已经阅读了MSDN 文章,那么我真的不知道你为什么错过了这篇文章的CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] ) 部分。

          这里清楚地说明了你想知道的一切。

          CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] 
          

          expressionToFind

          Is a character expression that contains the sequence to be found. expressionToFind is limited to 8000 characters.
          

          表达式搜索

          Is a character expression to be searched.
          

          开始位置

           Is an integer or bigint expression at which the search starts.
           If start_location is not specified(It's OPTIONAL PARAMETER),
           is a negative number, or is 0,
           the search starts at the beginning of expressionToSearch.
          

          【讨论】:

          • 是的。我已经通过了 MSDN。但我在想,从开始位置开始,它一直在计算字符数,直到找到搜索字符串。
          • 不,这是搜索开始的位置。
          猜你喜欢
          • 2018-05-29
          • 1970-01-01
          • 2021-12-13
          • 2021-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多