我想获取子字符串
在=
和,
这样的两个运算符之间
我尝试使用类似CHARINDEX
和LEFT
的方法来获取值,但是我得到了以下方面的输出:
CN=Khushwant Khatri
但我的输出应该仅为Khushwant Khatri
SELECT left([String_value],CHARINDEX(',',([String_value]),0)-1) from trim_string
我的字符串看起来像
CN=Khushwant Khatri,OU=TestMig,DC=valjha,DC=vedantaresource,DC=local
CN=Raghav Tare,OU=EXECUTIVE,OU=EXUDR,DC=HZL01,DC=vedantaresource,DC=local
CN=D K Chodankar,OU=Users,OU=AD LotusSync,DC=SGL01,DC=vedantaresource,DC=local
您会看到字符串的长度可变
我只希望CN值我的输出看起来像 库什万特·哈特里 拉加夫皮重 D K Chodankar
答案 0 :(得分:3)
使用SUBSTRING()
作为
SELECT SUBSTRING(S, 4, CHARINDEX(',', S)-4),
S
FROM
(
VALUES
('CN=Khushwant Khatri,OU=TestMig,DC=valjha,DC=vedantaresource,DC=local'),
('CN=Raghav Tare,OU=EXECUTIVE,OU=EXUDR,DC=HZL01,DC=vedantaresource,DC=local'),
('CN=D K Chodankar,OU=Users,OU=AD LotusSync,DC=SGL01,DC=vedantaresource,DC=local')
) T(S);
答案 1 :(得分:3)
您可以尝试一下。首先,您需要找到第一个=
的位置,因为名称将从此处开始,然后需要找到您的名称的长度,该长度由,
分隔。因此,我们找到下一个,
的索引,并将其从字符串的长度中减去直至=
。剩下的字符串就是您的名字。
我正在考虑您的第一个值“ CN =”在某些情况下可能会有所不同。
declare @str varchar(max) = 'CN=Khushwant Khatri,OU=TestMig,DC=valjha,DC=vedantaresource,DC=local'
select substring( @str, charindex('=',@str)+1, (charindex(',',@str) - (charindex('=',@str) +1) ))
根据给定的表结构详细信息,请找到以下代码段。
Create table trim_string ( string_value nvarchar(max) )
Insert into trim_string ( string_value )
values ( 'CN=Khushwant Khatri,OU=TestMig,DC=valjha,DC=vedantaresource,DC=local' )
, ( 'CN=Raghav Tare,OU=EXECUTIVE,OU=EXUDR,DC=HZL01,DC=vedantaresource,DC=local' )
, ( 'CN=D K Chodankar,OU=Users,OU=AD LotusSync,DC=SGL01,DC=vedantaresource,DC=local' )
----- this is your query section
; with cte as (
select string_value , substring( string_value, charindex('=',string_value)+1, (charindex(',',string_value) - (charindex('=',string_value) +1) )) newvalue
from trim_string )
---- you may store them in temptable
select * into #temp from cte
----or
---- for selection
select * from cte
----or
----- use to update
update cte set string_value = newvalue
select * from trim_string
根据评论讨论,请尝试此操作。
; with cte as (
select string_value , substring( string_value, charindex('=',string_value)+1, (charindex(',',string_value) - (charindex('=',string_value) +1) )) newvalue
from trim_string )
select * from cte
这应该为您提供表的所有字符串记录,并且Name在新列中以newvalue
的形式获取。
答案 2 :(得分:2)
尝试一下:
select substring(@t,charindex('=',@t)+1,charindex(',',@t)-4)
答案 3 :(得分:0)
我不确定您想要什么。还不清楚与CHARINDEX
一起工作。
但是我在想,也许这条查询可以帮助您更好地在字符串中找到所需的内容。
DECLARE @string VARCHAR(MAX) = 'CN=Khushwant Khatri,OU=TestMig,DC=valjha,DC=vedantaresource,DC=local,
,CN=Raghav Tare,OU=EXECUTIVE,OU=EXUDR,DC=HZL01,DC=vedantaresource,DC=local
,CN=D K Chodankar,OU=Users,OU=AD LotusSync,DC=SGL01,DC=vedantaresource,DC=local'
SELECT *
FROM (
SELECT -- this part is based on what your question looks it want.
CASE WHEN LEN(X.value)>2 THEN X.value END AS Value
FROM
(
SELECT value
FROM string_split(REPLACE(@string,',','='),'=') -- might help more than CHARINDEX
) X
) Y
WHERE Y.Value IS NOT NULL