Files
GateDge2023_ljy/01.扩展/HandleUtils/sql/拆分字段值.sql

72 lines
2.3 KiB
MySQL
Raw Normal View History

2024-04-10 10:39:04 +08:00
declare @val varchar(8000)
set @val = 'AA1,10.1;BB1,6.5'
/************************<EFBFBD><EFBFBD><EFBFBD>ֳɶ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>start***************************/
--v1.0
SELECT
rowSet.[1] AS 'MaterialId'
,rowSet.[2] AS 'Qty'
,rowSet.[3] AS 'StockId'
,rowSet.[4] AS 'dateTime'
FROM (
SELECT
CAST('<v>'+ REPLACE(rowSet.resVal,',','</v><v>') + '</v>' AS XML) AS xmlVal
,ROW_NUMBER() over (order by resVal) RN
FROM (
SELECT CAST('<v>'+ REPLACE('AA1,10.1;BB1,16.5',';','</v><v>') + '</v>' AS XML) AS xmlVal
) AS valSet
OUTER APPLY (
SELECT T.C.value('.','varchar(100)') resVal
FROM valSet.xmlVal.nodes('/v') AS T(C)
) rowSet
) AS valSet
OUTER APPLY (
SELECT TT2.*
FROM (
SELECT T.C.value('.','varchar(100)') resVal
,ROW_NUMBER() over (order by valSet.RN) RowNo
FROM valSet.xmlVal.nodes('/v') AS T(C)
) TT
PIVOT ( MAX(TT.resVal) FOR TT.RowNo IN ([1],[2],[3],[4])) TT2
) rowSet
--v2.0
SELECT
rowSet2.[1] AS 'MaterialId'
,rowSet2.[2] AS 'Qty'
,rowSet2.[3] AS 'StockId'
,rowSet2.[4] AS 'FDate'
,rowSet2.[5] AS 'FSBILLID'
,rowSet2.[6] AS 'FSID'
,rowSet2.[7] AS 'FSTABLENAME'
,0 AS 'HasVal'
FROM (
SELECT 1 ID,CAST('<v>'+ REPLACE('AA1,10.1;BB1,16.5',';','</v><v>') + '</v>' AS XML) AS xmlVal
) AS valSet
OUTER APPLY (
SELECT ROW_NUMBER() OVER (ORDER BY valSet.ID) RN
,CAST('<v>'+ REPLACE(T.C.value('.','varchar(100)'),',','</v><v>') + '</v>' AS XML) xmlVal
FROM valSet.xmlVal.nodes('/v') AS T(C)
) rowSet
OUTER APPLY (
SELECT * FROM (
SELECT T.C.value('.','varchar(100)') AS xmlVal
,ROW_NUMBER() OVER (ORDER BY rowSet.RN) RowNo
FROM rowSet.xmlVal.nodes('/v') AS T(C)
) TT
PIVOT ( MAX(TT.xmlVal) FOR TT.RowNo IN ([1],[2],[3],[4],[5],[6],[7])) TT2
) rowSet2
/************************<EFBFBD><EFBFBD><EFBFBD>ֳɶ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>end***************************/
/************************<EFBFBD><EFBFBD><EFBFBD>ֳɶ<EFBFBD><EFBFBD><EFBFBD>start***************************/
SELECT
rowSet.resVal
,rowSet.rowNo
FROM (
SELECT CAST('<v>'+ REPLACE('AA1,10.1;BB1,6.5',';','</v><v>') + '</v>' AS XML) AS xmlVal
) AS valSet
OUTER APPLY (
SELECT T.C.value('.','varchar(100)') resVal
,row_number() over (order by C) rowNo
FROM valSet.xmlVal.nodes('/v') AS T(C)
) rowSet
/************************<EFBFBD><EFBFBD><EFBFBD>ֳɶ<EFBFBD><EFBFBD><EFBFBD>end***************************/