2016-09-07 2 views
0

У меня есть таблица, которая содержит столбец с местом DOC, такие как AA/BB/CC/EEКак подстрока записи с переменной длиной

Я пытаюсь получить только одну из этих частей, позволяет сказать только CC (которая имеет переменную длину). До сих пор я пытался следующим образом:

SELECT RIGHT(doclocation,CHARINDEX('/',REVERSE(doclocation),0)-1) 
FROM Table 
WHERE doclocation LIKE '%CC %' 

Но я не получаю ожидаемый результат

ответ

0

Используйте ParseName функцию, как это,

DECLARE @s VARCHAR(100) = 'AA/BB/CC/EE' 

SELECT PARSENAME(replace(@s, '/', '.'), 2) 
0

PARSENAME функция используется, чтобы получить указанную часть имени объекта и не должна использоваться для этой цели, поскольку она будет анализировать только строки с максимальным количеством 4 объектов (см. документацию SQL Server PARSENAME по адресу MSDN) SQL Server 2016 имеет новую функцию STRING_SPLIT, но если вы не используете SQL Server 2016, вам необходимо отказаться от решений, описанных здесь: How do I split a string so I can access item x?

0

Это очень больно делать в SQL Server. Один из методов - это серия операций с строкой. Я считаю, это простейший с помощью outer apply (если мне не нужно подзапросы по другой причине):

select * 
from t outer apply 
    (select stuff(t.doclocation, 1, patindex('%/%/%', t.doclocation), '') as doclocation2) t2 outer apply 
    (select left(tt.doclocation2), charindex('/', tt.doclocation2) as cc 
    ) t3; 
0

Вопрос не ясно, что я думаю. Не могли бы вы указать, какое значение вам нужно? Если вам нужны значения после CC, вы можете сделать CHARINDEX на «CC». Кроме того, запрос не кажется правильным, как строка, предоставленная «AA/BB/CC/EE», который не имеет место между ним, но в запросе вы ищете пространство WHERE doclocation LIKE '%CC %'

SELECT SUBSTRING(doclocation,CHARINDEX('CC',doclocation)+2,LEN(doclocation)) 
FROM Table 
WHERE doclocation LIKE '%CC %' 
Смежные вопросы