【问题标题】:Taking Substring from a delimited string based on condition in SQL Server根据 SQL Server 中的条件从分隔字符串中获取子字符串
【发布时间】:2015-02-27 10:59:51
【问题描述】:

我有一个分隔符

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  

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

【问题讨论】:

  • 我曾尝试使用 split 函数分离数据,但我需要提出一个可配置的表值函数,该函数将计算所有这些参数以提供输出。任何关于如何进行优化方法的建议都将不胜感激。
  • SQL server中没有split功能;你是自己写的还是使用 .NET 的?
  • 我已经用SQL Server写好了
  • 好的,所以你的函数已经完成了词法分析的第一部分并有了标记。解析的下一部分可以将表定义中的部分标记转换为要插入到表中的数据。您可以通过生成动态 sql 语句来做到这一点。
  • 如果您对 XML 感到满意,您可以将字符串转换为 XML,然后通过 Xpath/Xquery 提取数据

标签: sql sql-server-2008 substring delimiter


【解决方案1】:

要摆脱前三个参数,您可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 2012-06-24
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多