2016-06-18 95 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

也許選擇 LEFT(LocationName,CHARINDEX(' - ',LocationName)-1), EncounterNumber from #TubeRateQty – OldBoyCoder

+0

消息537,級別16,狀態2,行124 傳遞給LEFT或SUBSTRING函數的長度參數無效。 – user3666224

+0

它可能應該選擇LEFT(LocationName,CHARINDEX(' - ',LocationName)),#TubeRateQt中的EncounterNumber。但我目前無法使用sqlfiddle來測試任何內容。你確定所有的行都有' - '嗎? – OldBoyCoder

回答

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

消息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