SQL Server: как использовать подстроку в запросе? - PullRequest
1 голос
/ 18 апреля 2011

у меня есть такая строка:

[Arturo Ochando]  <20>

Но я хочу только:

Arturo Ochando

Как я могу это сделать?

И как использовать это в операции выбора?

Обновление: я хотел бы найти первый и последний '[' ']' и поймать только то, что там внутри.

Пример:

голос: английская версия) [Кобальтовый коготь]

возврат

Кобальтовый коготь

С наилучшими пожеланиями, Вальтер Энрике.

Ответы [ 3 ]

2 голосов
/ 18 апреля 2011

Получить текст между первым [ и следующим ].

-- cte for test data
;with actor_character(character) AS
(
  select 'voice: English version) [Cobalt Claw]' union all
  select 'voice: English version) [Cobalt Claw' union all
  select 'voice: English version)  Cobalt Claw]' union all
  select 'voice: English version) ]Cobalt Claw[' union all
  select 'voice: English version)  Cobalt Claw'
)
select *,
  case
    -- Test for not valid positions
    when Start.Pos = 1 or Stop.Pos = 0
    then character
    else substring(character, Start.Pos, Stop.Pos-Start.Pos)
  end
from actor_character
  cross apply (select charindex('[', character)+1) as Start(Pos)
  cross apply (select charindex(']', character, Start.Pos)) as Stop(Pos)

Получить текст между первым [ и последним ].

-- cte for test data
;with actor_character(character) AS
(
  select 'voice: English version) [Cobalt Claw]' union all
  select 'voice: English version) [Cobalt Claw' union all
  select 'voice: English version)  Cobalt Claw]' union all
  select 'voice: English version) ]Cobalt Claw[' union all
  select 'voice: English version) [Cobalt]Claw]' union all
  select 'voice: English version)  Cobalt Claw'
)
select *,
  case
    -- Test for not valid positions
    when Start.Pos = 0 or Stop.Pos = 0 or Start.Pos > len(character)-Stop.Pos
    then character
    else substring(character, Start.Pos+1, len(character)-Stop.Pos-Start.Pos)
  end

from actor_character
  cross apply (select charindex('[', character)) as Start(Pos)
  cross apply (select charindex(']', reverse(character))) as Stop(Pos)
1 голос
/ 18 апреля 2011

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

http://justgeeks.blogspot.com/2008/08/adding-regular-expressions-regex-to-sql.html

http://blog.tech -cats.com / 2007/09 / с использованием -регулярный-выражение-в-SQL-server.html

0 голосов
/ 18 апреля 2011
select substring(field, charindex('[', field) + 1, charindex(']', field) - charindex('[', field) - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...