2016-06-18 2 views
2

Я пытаюсь получить данные для слева от - я попытался код нижеИзвлечь текст слева от «-»

LocationName 
CCC-CC36-A 
5N-N577-A 
5N-N577-A 
5N-N577-A 
2T-225-A 
PE-020-A 

select 
LEFT(LocationName, LEN(LocationName) - CHARINDEX('-',LocationName)-1), 
EncounterNumber 
from #TubeRateQty 
+1

Может выбрать ВЛЕВО (LocationName, CHARINDEX ('-', LocationName) -1), EncounterNumber из #TubeRateQty – OldBoyCoder

+0

Msg 537, уровень 16, состояние 2, строка 124 Неверный параметр длины передается функции LEFT или SUBSTRING. – user3666224

+0

Вероятно, нужно выбрать LEFT (LocationName, CHARINDEX ('-', LocationName), EncounterNumber из #TubeRateQt. но я не могу заставить sqlfiddle работать в данный момент, чтобы проверить что-либо. Вы уверены, что у всех ваших строк есть «-»? – OldBoyCoder

ответ

2
SELECT 
    LEFT(LocationName, ISNULL(NULLIF(CHARINDEX('-',LocationName),0), LEN(LocationName)+1)-1) 
,EncounterNumber 
from #TubeRateQty 
+0

Msg 537, уровень 16, состояние 2, строка 124 Неверный параметр длины передан функции LEFT или SUBSTRING. – user3666224

+0

@ user3666224 попробуйте сейчас, было ошибкой, если не было строки '' ', я добавил еще несколько проверок, чтобы справиться с этой ситуацией. –

0
DECLARE @xml xml 

SELECT @xml =(
    SELECT CAST('<i><a>' + REPLACE(LocationName,'-','</a><a>') + '</a></i>' as xml) 
    FROM YourTable 
    FOR XML PATH('') 
) 

SELECT t.v.value('a[1]','nvarchar(100)'), 
     t.v.value('a[2]','nvarchar(100)'), 
     t.v.value('a[3]','nvarchar(100)') 
FROM @xml.nodes('/i') as t(v) 

Выход:

CCC  CC36  A 
5N   N577  A 
5N   N577  A 
5N   N577  A 
2T   225  A 
PE   020  A 
+0

слишком сложное решение для довольно простой задачи :( –

+0

@ M.Ali OP нуждается только в том, чтобы ... ну, да, сложно. – gofr1

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