Как получить индекс по последнему вхождению символа в строку sql? - PullRequest
0 голосов
/ 30 января 2012

Я использую следующее, чтобы найти город в моей базе данных.

 SELECT SUBSTRING(Location, PATINDEX( '%(%' , Location), LEN(Location))
   FROM myTable

Это дает мне следующий тип результатов.

(San Jose, CA)
(Los Angeles, CO)
(A Place)(Miami, FL)
...

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

Я пытался использовать REVERSE (), но мне не повезло, возможно, я использовал его неправильно или, возможно, это не мое решение. Кто-нибудь может помочь? Спасибо!

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Вы можете;

;with T(f) as (
    select '' union 
    select 'xxx' union 
    select 'xxx (yyy)' union 
    select 'xxx (yyy) (zzz)'
)
select 
    right(f, patindex('%(%', reverse(f) + '('))
from T

>>

(No column name)

xxx
(yyy)
(zzz)

Снять + '(', чтобы получить пробелы без паренов.

0 голосов
/ 30 января 2012

Взгляните на Функции SQL Server для работы со строками . В частности на CHARINDEX . Это должно быть то, что вы ищете.

Однако, в качестве долгосрочного решения таких проблем, рекомендуется рефакторинг схемы. Хранение сложных данных в виде строк и последующее применение строковых манипуляций зачастую менее эффективно, чем хранение данных в форме, которую легко анализировать с помощью запросов.

...