如何用(#和;)拆分SQL字符串?
Billing Column,其中字符串以下面的格式保存
548784545S#15/01/2016;84854555545#13/01/2016;45454554545#21/01/2016
Run Code Online (Sandbox Code Playgroud)
拆分#和; 我想要下面的格式
548784545S 15/01/2016
84854555545 13/01/2016
45454554545 21/01/2016
Run Code Online (Sandbox Code Playgroud)
到目前为止我做了什么
SELECT SUBSTRING(CNT_SHIPPING_BILLNO, 1,
CASE CHARINDEX('#', CNT_SHIPPING_BILLNO)
WHEN 0
THEN LEN(CNT_SHIPPING_BILLNO)
ELSE CHARINDEX('#', CNT_SHIPPING_BILLNO) - 1
END)
AS Billno,
SUBSTRING(CNT_SHIPPING_BILLNO,
CASE CHARINDEX('#', CNT_SHIPPING_BILLNO)
WHEN 0
THEN LEN(CNT_SHIPPING_BILLNO) + 1
ELSE CHARINDEX(';', CNT_SHIPPING_BILLNO) + 1
END, 1000) AS BillDate
FROM SHIPPINGBILL
Run Code Online (Sandbox Code Playgroud)
在这里,我只使用上面的查询获得初始值
548784545S 15/01/2016;84854555545#13/01/2016;45454554545#21/01/2016
Run Code Online (Sandbox Code Playgroud)
DECLARE @t VARCHAR(MAX) = '548784545S#15/01/2016;84854555545#13/01/2016;45454554545#21/01/2016'
;WITH cte AS (
SELECT x = CONVERT(XML,'<p>' + REPLACE(@t, ';', '</p><p>') + '</p>')
)
SELECT PARSENAME(val, 2), PARSENAME(val, 1)
FROM (
SELECT val = REPLACE(t.c.value('.', 'VARCHAR(MAX)'), '#', '.')
FROM cte
CROSS APPLY x.nodes('p') t(c)
) t
Run Code Online (Sandbox Code Playgroud)
输出 -
--------------- ------------
548784545S 15/01/2016
84854555545 13/01/2016
45454554545 21/01/2016
Run Code Online (Sandbox Code Playgroud)