根据SQL Server中的条件从分隔字符串中获取子字符串

时间:2014-12-31 10:19:50

标签: sql sql-server-2008 substring delimiter

我有一个分隔

string ";2;5;2;5;04/02/2014;3;100.000000;5;04/02/2015;3;100.000000;5;04/02/2016;3;100.000000;5;04/02/2017;3;100.000000;5;04/02/2018;3;100.000000;"

数据的格式如下:

1st character:  Delimiter used within this format field
Number of dimensions 
Delimiter
Number of rows
Delimiter
Number of columns
Delimiter
...Data Elements…
Delimiter

我想在查询或函数中提取这些数据,以像

这样的表格格式获取数据元素
ScheduleDate    ScheduleValue
04/02/2015  100.000000
04/02/2016  100.000000
04/02/2017  100.000000
04/02/2018  100.000000
04/02/2016  34428.9700
04/02/2017  34428.9700
04/02/2018  34428.9700
04/02/2019  34428.9700

此处“5”表示日期,“04/02/2015”表示实际日期,“3”表示价格,“100.00000”表示实际价格。 同样,其他指标如下:

       1 Character
       2 Numeric
       3 Price  
       4 Security
       5 Date    
       6 Time    
       7 Date or time      
       8 Bulk
       9 Month/Year  

我需要在该函数或查询中配置以适应这一点。 如果有人可以提供帮助,我将非常感激。

1 个答案:

答案 0 :(得分:0)

要摆脱前三个参数,你可以做到这一点:

DECLARE @string VARCHAR(max)
SET @string=';2;5;2;5;04/02/2014;3;100.000000;5;04/02/2015;3;100.000000;5;04/02/2016;3;100.000000;5;04/02/2017;3;100.000000;5;04/02/2018;3;100.000000;'
DECLARE @newstring VARCHAR(MAX)
SET @newstring=CAST((SELECT CAST('<Node>'+REPLACE(@string,';',';</Node><Node>')+'</Node>' AS XML).query('//Node[position()>4]/text()') ) AS VARCHAR(MAX))
SELECT @newstring

所以这基本上会留下数据类型和数据,您可以使用您提到的现有代码进行解析