我如何从两个符号之间的字符串中获取子字符串

时间:2019-08-31 05:59:58

标签: sql sql-server

我想获取子字符串 在=,这样的两个运算符之间

我尝试使用类似CHARINDEXLEFT的方法来获取值,但是我得到了以下方面的输出: 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

4 个答案:

答案 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