Как получить значение после первой запятой в SQL Server - PullRequest
0 голосов
/ 16 марта 2019

Я хочу получить Tex из этой строки.

ID  string
1   CN=username,OU=Tex,OU=Users,OU=Region1,DC=company,DC=com

substring(string, charindex(',', string) + 4, LEN(string)) 

Я могу добраться до первой запятой и добраться до Текса, но как мне удалить остаток строки?

Спасибо.

Ответы [ 6 ]

1 голос
/ 16 марта 2019

Другой вариант - через маленький XML

Select ID
      ,SomeValue = Cast('<x>' + replace(string,',','</x><x>')+'</x>' as xml).value('/x[2]','varchar(max)')
 From YourTable

Возвращает

ID  SomeValue
1   OU=Tex
0 голосов
/ 25 марта 2019

Это то, что я в конечном итоге использовал. Спасибо за все ответы!

LEFT(SUBSTRING(string, CHARINDEX('ou=', string) + 3, LEN(string)), 3) 
0 голосов
/ 18 марта 2019
declare @t table (String varchar(500))

insert into @t values('CN=username,OU=Tex,OU=Users,OU=Region1,DC=company,DC=com')

select SUBSTRING(String,charindex('tex',String),len('tex')) from @t
0 голосов
/ 16 марта 2019

Вот забавный

SELECT SUBSTRING(value, 4, LEN(value)-4) FROM STRING_SPLIT(string, ',') WHERE SUBSTRING(value, 1, 3)='OU='

Ссылка: https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017

0 голосов
/ 16 марта 2019

Если вы всегда будете искать первое значение после первого OU, вы можете сделать это.Но если вы собираетесь просматривать значения из других подразделений, я бы использовал один из приведенных выше вариантов, так как синтаксис этого может привести к очень быстрому беспорядку.

declare @SearchExpression varchar(max) = 'CN=username,OU=Tex,OU=Users,OU=Region1,DC=company,DC=com'

select Substring(
@SearchExpression,
charindex(',', @SearchExpression) + 4,  --+4 is the lengh of first ,=OU
charindex(',', substring(@SearchExpression, (charindex(',', @SearchExpression) + 4), len(@SearchExpression))) - 1 
--This second line determines how far to substring past the ,=OU by searching for everyting past the first comma then looking for the second comma
 ) as Answer
0 голосов
/ 16 марта 2019

Строковые функции в SQL Server довольно ограничены. Вот один из методов:

select left(v2.str, charindex(',', v2.str) - 1)
from t cross apply
     (values (stuff(t.str, 1, charindex(',', t.str), ''))) v1(str) cross apply
     (values (stuff(v1.str, 1, charindex('=', v1.str), ''))) v2(str);
...