2013-06-12 3 views
1

скобками у меня есть данные в столбце базы данных SQL-сервере, как следующее:Выбор данных столбцов между()

Column 

Ot ntri - Non Cash - (6932) 
Otr Contri- Cash - (6930) 
anth C-Cash - (6935) 
Phil Cor-Non Cash - (6937) 
Poll Conh - (6940) 

Мне нужен запрос, чтобы выбрать данные, которые присутствуют только жгуты в круглых скобках().

Пожалуйста, помогите:

мне нужно выбрать только

6932 
6930 
6935 

и т.д. для колонки

Благодарности

+0

Почему бы не сделать другую колонку для чисел в скобках? – amrinder007

+1

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

+0

Запрос должен извлекать только значения внутри скобки. Он может быть числовым или символьным. Спасибо – Gallop

ответ

2

Сочетание SUBSTRING и CHARINDEX могли бы сделать это для вас:

SELECT * , 
    REVERSE(t.[Column]) AS Reversed , 
    CASE WHEN t.[Column] LIKE '%(%' 
       AND t.[Column] LIKE '%)%' 
     THEN REVERSE(SUBSTRING(REVERSE(t.[Column]), 
           CHARINDEX(')', REVERSE(t.[Column])) + 1, 
           CHARINDEX('(', REVERSE(t.[Column])) 
           - CHARINDEX(')', REVERSE(t.[Column])) - 1)) 
     ELSE NULL 
    END AS result 
FROM dbo.[Table] AS t 
+0

«Неверный параметр длины передан функции SUBSTRING». Я получаю это сообщение, и он возвращает только 1000 строк фактического набора данных - 3000 строк. – Gallop

+0

для меня работает запрос. какая версия SQL Server у вас есть? каждая строка содержит число + скобки? если нет, сообщение об ошибке, которое вы получаете, является разумным, так как CHARINDEX поставляет 0, если '(' и ')' не найден, поэтому во второй части будет выражено отрицательное выражение (длина подстроки) – JanW

+0

i обновил ответ, чтобы признать действительный вход. попробуйте еще раз;) – JanW

2

Я знаю, что вы приняли хороший ответ. Это еще один способ сделать это. Те же функции используются с CTE:

SQL server 2008 fiddle example, чтобы получить строку в последних скобках.

;with cte as (
select col, charindex(')',reverse(col),1) brk1, 
     charindex('(',reverse(col),1) brk2 
from t 
) 
select col, reverse(substring(reverse(col),brk1+1,brk2-brk1-1)) mystr 
from cte 
+1

+1 как этот подход :) один пример для упрощения моего решения. – JanW

Смежные вопросы