2017-07-11 46 views
0

我在因特網上發現了從「 - 」噴出數據的以下查詢。 我只想要「 - 」後的價值,我該如何實現這一點。而且我也需要該值的最大值通過單個查詢在sql中分割值

任何人都可以幫助我。

SELECT 
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Certs 
FROM 
(
SELECT CAST('<XMLRoot><RowData>' + REPLACE(BATCH_NO,'-','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x 
FROM BATCH 
)BATCH 
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n) 

樣本數據

Batch_NO 
---------------- 
30-002 
30-002 
001-003 

輸出

------------- 
30 
002 
30 
002 
001 
003 
+0

下面是一些示例數據 –

回答

0

我要求「 - 」的正確值,並用下面的代碼完成。

感謝每一位幫助我的人。

select MAX(RIGHT(BATCH_NO, charindex('-',REVERSE(BATCH_NO))-1)) AS BATCH_NO FROM BATCH 
1

您需要使用INTvalue方法,而不是varchar數據類型的任何數字類型

SELECT Max(m.n.value('.[1]', 'INT')) AS Certs 
FROM (SELECT Cast('<XMLRoot><RowData>' 
        + Replace(BATCH_NO, '-', '</RowData><RowData>') 
        + '</RowData></XMLRoot>' AS XML) AS x 
     FROM (VALUES ('30-002'), 
         ('30-002'), 
         ('001-003')) tc (batch_no))BATCH 
     CROSS APPLY x.nodes('/XMLRoot/RowData')m(n) 
+0

我需要後才值「 - 」不是所有的值(喜芬的右) –

+0

@Lord_of_Lucifer - 與您的表替換表值構造函數 –