如何在SQL Server中的第一个逗号后获取值

时间:2019-03-16 16:45:22

标签: sql sql-server sql-server-2012

我想从该字符串中取出Tex

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

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

我能够到达第一个逗号并到达Tex,但是如何删除字符串的其余部分?

谢谢。

6 个答案:

答案 0 :(得分:1)

另一种选择是通过一些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

答案 1 :(得分:0)

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);

答案 2 :(得分:0)

如果您总是要在第一个OU之后寻找第一个值,则可以执行此操作。但是,如果您要查看其他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

答案 3 :(得分:0)

这是一个有趣的人

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

这是我最终使用的。谢谢您的所有回答!

import React from 'react';
import ReactDOM from 'react-dom';
import Enzyme, {mount} from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import EventsGrid from '../EventsGrid';
import sampleData from './sampleData/transformedEventSample';

Enzyme.configure({adapter: new Adapter()});


describe('Tests for <EventDataGrid/>', () => {

    it('sort data grid by ascending ', () => {

        const wrapper = mount(<EventsGrid initialRows={sampleData}/>);
        const instance = wrapper.instance();
        jest.spyOn(instance, 'sortRows');

        const column = 'eventTypeNameI18n';
        const sortDirection = 'ASC';

        wrapper.find('#EventDataGrid').at(1).prop('onGridSort')(column, sortDirection);

        expect(instance.sortRows).toHaveBeenCalled();

    });

    it('sort data grid by descending', () => {

        const wrapper = mount(<EventsGrid initialRows={sampleData}/>);
        const instance = wrapper.instance();
        jest.spyOn(instance, 'sortRows');

        const column = 'eventTypeNameI18n';
        const sortDirection = 'DESC';

        wrapper.find('#EventDataGrid').at(1).prop('onGridSort')(column, sortDirection);

        expect(instance.sortRows).toHaveBeenCalled();
    });

});