想知道第一个字符CharIndex

时间:2014-09-29 09:15:06

标签: sql sql-server sql-server-2008-r2

在下面的例子中我想知道第一个字符的charindex,除了空格标签换行符等。

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

Declare  @str varchar(100)
set @str='      test String'

在上述情况下,我想要charindex的' t' (表示字符串的第一个字符)

  set @str='              String test'

在上述情况下,我想要' S' (表示字符串的第一个字符)

任何人请建议我解决方案。

3 个答案:

答案 0 :(得分: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)

字符如下:

  1. CHAR(13)=回车
  2. CHAR(10)= linefeed
  3. CHAR(13)+ CHAR(10)=标准换行符
  4. CHAR(9)= TAB

答案 1 :(得分:0)

对区分大小写使用排序规则。

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

答案 2 :(得分:0)

您可以使用PATINDEX查找不属于排除字符的特定子集的字符的位置:

PATINDEX('%[^list of excluded characters]%', @str)

在您的情况下,排除的字符列表将包含CHAR(32)(空格),CHAR(9)(制表符),CHAR(13)(回车),CHAR(10)(换行)以及etc.你的意思。这是一个例子:

DECLARE @str varchar(100);
SET @str = '
  test string';
SELECT PATINDEX('%[^' + CHAR(32) + CHAR(9) + CHAR(13) + CHAR(10) + ']%', @str);

上例中的@str以换行符(CHAR(13) + CHAR(10))开头,后跟两个空格。因此,SELECT语句的输出would be this

----------
4