Sql 想知道第一个角色CharIndex吗

Sql 想知道第一个角色CharIndex吗,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,在下面的例子中,我想知道除空格、制表符、换行符等以外的第一个字符的charindex 我无法做到这一点,因为SQL函数的CHARINDEX()需要索引字符 但在我的字符串中,任何人都是动态的 Declare @str varchar(100) set @str=' test String' 在上面的例子中,我希望charindex的't'(表示字符串的第一个字符) 在上面的例子中,我希望charindex为'S'(表示字符串的第一个字符) 任何人请向我推荐解决方案。使用排序规则区分

在下面的例子中,我想知道除空格、制表符、换行符等以外的第一个字符的charindex

我无法做到这一点,因为SQL函数的
CHARINDEX()
需要索引字符 但在我的字符串中,任何人都是动态的

Declare  @str varchar(100)
set @str='      test String'
在上面的例子中,我希望charindex的't'(表示字符串的第一个字符)

在上面的例子中,我希望charindex为'S'(表示字符串的第一个字符)


任何人请向我推荐解决方案。

使用排序规则区分大小写

Select CHARINDEX ( 'S',@str COLLATE Latin1_General_CS_AS, 1 )

最好的办法是想出某种正则表达式。还可以使用回车+换行符(换行符)和制表符,除非执行以下操作,否则无法正确显示:

DECLARE  @str VARCHAR(100)
SET @str=CHAR(9)+'      '+CHAR(13)+CHAR(10)+'test String'

SELECT CHARINDEX(LTRIM(REPLACE(REPLACE(REPLACE(@str,CHAR(13),' '),CHAR(10),' '),CHAR(9),' ')), @str);
SELECT SUBSTRING(@str, CHARINDEX(LTRIM(REPLACE(REPLACE(REPLACE(@str,CHAR(13),' '),CHAR(10),' '),CHAR(9),' ')), @str), 1)
其特点如下:

  • 字符(13)=回车
  • 字符(10)=换行符
  • 字符(13)+字符(10)=标准换行符
  • 字符(9)=制表符
  • 可以使用查找不属于排除字符的特定子集的字符的位置:

    PATINDEX('%[^list of excluded characters]%', @str)
    
    上例中的
    @str
    以一个换行符(
    CHAR(13)+CHAR(10)
    )开头,后跟两个空格。因此,SELECT语句的输出:


    排序规则的更改将删除尾随的空格?如果我们先使用空格制表符,然后使用空格,则不会给出正确的charindex。嗯,是的。在空格+制表符+空格的情况下,charindex值的变化似乎很奇怪。如果在空格后添加选项卡,charindex实际上可以减少。但是,它仍然能够正确识别第一个字符的位置。不幸的是,我不知道,也没有时间找出它为什么会这样,但不管我对空格、制表符和换行符使用哪种顺序,它都适用于我。多次使用字符串空格和制表符,然后查看位置的结果。它给出了错误的位置。@Navneet:你能举个例子吗?我不太明白你的意思。到目前为止,我已经尝试了一些空格、换行符和制表符的组合,这些都适合我。在@str='test string'中,首先只给一个空格,它给了2个,这很好,现在在空格后给一个制表符,它给了2个为什么??这就是问题所在issue@Navneet: . 你能用我的答案中的方法创建一个显示错误结果的SQLFiddle演示吗?
    PATINDEX('%[^list of excluded characters]%', @str)
    
    DECLARE @str varchar(100);
    SET @str = '
      test string';
    SELECT PATINDEX('%[^' + CHAR(32) + CHAR(9) + CHAR(13) + CHAR(10) + ']%', @str);
    
    ----------
    4