在下面的例子中我想知道第一个字符的charindex,除了空格标签换行符等。
我无法做到这一点,因为SQL的CHARINDEX()
函数需要索引字符
但在我的字符串中,任何人都是动态的。
Declare @str varchar(100)
set @str=' test String'
在上述情况下,我想要charindex的' t' (表示字符串的第一个字符)
set @str=' String test'
在上述情况下,我想要' S' (表示字符串的第一个字符)
任何人请建议我解决方案。
答案 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 :(得分: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