使用单个查询在sql中拆分值

时间:2017-07-11 05:22:18

标签: sql-server sql-server-2008

我在互联网上发现以下查询从“ - ”吐出数据。 我只想在“ - ”之后获得价值,我怎么能实现这一目标。而且我还需要该值的最大值

任何人都可以帮助我。

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

2 个答案:

答案 0 :(得分:1)

您需要在INT方法中使用value或任何数值数据类型,而不是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) 

答案 1 :(得分:0)

我需要“ - ”的值,并使用以下代码执行。

感谢每一位帮助我的人。

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