需求: 用户A 选择了日期 2015-01-01和2015-01-02,以及填写了价格200. 那么数据库应该有两条记录,分别是
A 2015-01-01 200
A 2015-01-02 200
也就是一个日期一条数据。
实际数据
'87349+2015-06-10 10:38_2015-06-23 10:38+20.00
$109603+2015-06-16 10:38_2015-06-22 10:38+0.00'
这个是后台传过来的一串数据,现在要根据这个拆分,组合成四条数据
其中' $'分隔了两个用户的数据,而每个用户里面用"+"分隔了 这个用户的信息 如87349+2015-06-10 10:38_2015-06-23 10:38+20.00表示用户ID 是87349,日期有2015-06-10 10:38_2015-06-23 10:38,价格是20.00
然而,日期中又用"_"分隔,也就是说87349 有两个日期。
按照这字符串拆分应该有四条数据
87349 2015-06-10 10:38 20.00
87349 2015-06-23 10:38 20.00
109603 2015-06-16 10:38 0.00
109603 2015-06-22 10:38 0.00
现在提供两个函数
fn_GetSplitStr(str,split,len) 需要拆分的字符串str,根据split字符拆分,取拆分后的第len个值。返回一个值
fn_StrSplitToTable(str,split) 需要拆分的字符串str,根据split字符拆分,返回一张表
但是这两个函数都是只有一个字段而已,上面的直接返回一个字符串,后面一个仅仅一个拆分后的字段。
我现在不懂怎么连表。
;WITH act AS (
SELECT dbo.fn_GetSplitStr(fs.cValue, '+', 1) stuID,
dbo.fn_GetSplitStr(fs.cValue, '+', 2) dateList,
dbo.fn_GetSplitStr(fs.cValue, '+', 3) FeeStand
FROM dbo.fn_StrSplitToTable(@SelInfo,' $') AS fs )
SELECT * FROM act
我做到这一步了,下面的怎么把剩下的拆出来我弄不出来

------解决思路----------------------
DECLARE @STRIN VARCHAR(MAX)
SET @STRIN='87349+2015-06-10 10:38_2015-06-23 10:38+20.00
$109603+2015-06-16 10:38_2015-06-22 10:38+0.00'
;WITH CTE AS(
SELECT RTRIM(T2.V)V,CHARINDEX('+',T2.V)N1
,CHARINDEX('_',T2.V)N2
,CHARINDEX('+',T2.V,CHARINDEX('+',T2.V)+1)N3
FROM(SELECT CAST('<V>'+REPLACE(@STRIN,'$','</V><V>')+'</V>'AS XML)VS)T1
CROSS APPLY(SELECT N.V.value('.','VARCHAR(100)')V FROM T1.VS.nodes('/V')N(V))T2
)
,CTE2 AS(
SELECT LEFT(V,N1-1)AS[stuID]
,SUBSTRING(V,N1+1,N2-N1-1)[date1]
,SUBSTRING(V,N2+1,N3-N2-1)[date2]
,RIGHT(V,LEN(V)-N3)[FeeStand]
FROM CTE
)
SELECT [stuID],[date],[FeeStand]
FROM CTE2 UNPIVOT([date] FOR T IN([date1],[date2]))U