Найти подстроку в SQL - PullRequest
       11

Найти подстроку в SQL

2 голосов
/ 02 июля 2019

Я должен найти подстроку следующим образом.

Данные, как показано ниже


aaaa.bbb.ccc.dddd.eee.fff.ggg 

qq.eeddde.rrr.t.hh.jj.jj.hh.hh 

ee.r.t.y.u.i.ii.

Я хочу выводить как-


bbb

eeeddde

r

вызов, с которым я сталкиваюсь, имеет (.) В качестве разделителя, поэтому подстрока трудна для работы.

SELECT SUBSTRING(string,CHARINDEX('.',string)+1,
       (((LEN(string))-CHARINDEX('.', REVERSE(string)))-CHARINDEX('.',string))) AS Result 
  FROM [table] 

bbb

eeeddde

r

выглядит подстрока между первым и вторым (.)

тогда это может быть между вторым и третьим (.)

Ответы [ 4 ]

2 голосов
/ 02 июля 2019

Вы можете использовать функции left(), replace() и charindex() вместе:

select replace(
        replace(
               left(str,charindex('.',str,charindex('.',str)+1)),
               left(str,charindex('.',str)),
               ''
               ),
               '.'
               ,''
              ) as "Output"
  from t;

Демо

2 голосов
/ 02 июля 2019

Я предполагаю (CHARINDEX), что это MS SQL Server. CROSS APPLY удобно для промежуточных расчетов.

SELECT t.pos, t1.pos,
  SUBSTRING(string, t.pos + 1, t1.pos - t.pos -1) AS Result 
FROM [table]
CROSS APPLY ( VALUES(CHARINDEX('.',string)) ) t(pos) 
CROSS APPLY ( VALUES(CHARINDEX('.',string, t.pos+1))) t1(pos) 
2 голосов
/ 02 июля 2019

Еще один вариант - использовать немного XML

Пример

Declare @YourTable table (ID int,SomeColumn varchar(max))
Insert Into @YourTable values
 (1,'aaaa.bbb.ccc.dddd.eee.fff.ggg')
,(2,'qq.eeddde.rrr.t.hh.jj.jj.hh.hh')
,(3,'ee.r.t.y.u.i.ii.')


Select ID
      ,SomeValue = convert(xml,'<x>' + replace(SomeColumn,'.','</x><x>')+'</x>').value('/x[2]','varchar(100)')
 From @YourTable

Возвращает

ID  SomeValue
1   bbb
2   eeddde
3   r
2 голосов
/ 02 июля 2019

Вот один из методов:

select left(v.str1, charindex('.', v.str1 + '.') - 1)
from t cross apply
     (values (stuff(t.string, 1, charindex('.', t.string + '.'), '')
     ) v(str1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...