【问题标题】:Multiple splits in Ms SqlMs Sql 中的多个拆分
【发布时间】:2013-09-18 11:15:11
【问题描述】:

我有一个带有两个分隔符‘|’管道和‘,’逗号的格式字符串

'1,100,12345|2,345,433|3,23423,123|4,33,55'

并且必须如下插入表格列

+-----+---------+--------+
| seq | invoice | amount |
+-----+---------+--------+
|   1 |     100 |  12345 |
|   2 |     345 |    433 |
|   3 |   23423 |    123 |
|   4 |      33 |     55 |
+-----+---------+--------+

请帮忙 谢谢 帕提巴

【问题讨论】:

  • 到目前为止你做了什么?
  • 我可以通过'|'得到第一个分割
  • 需要拆分通常表明缺乏数据库设计。您应该对其进行规范化并使用表格来链接这些值。
  • 这个字符串是你的应用程序生成的吗?如果是这样,您可以使用表值参数而不是分隔字符串传递这些参数。
  • 对每一个用'|'分割后的结果字符串,再用','分割,并将结果插入到表中。顺便说一句,如果你告诉所有人你想要 sql 或者其他语言的代码,那就更好了。

标签: sql-server sql-server-2008 split csv


【解决方案1】:

一种方式

DECLARE @S VARCHAR(MAX) = '1,100,12345|2,345,433|3,23423,123|4,33,55'

DECLARE @x xml = '<r><c>' + 
                 REPLACE(REPLACE(@S, ',','</c><c>'),'|','</c></r><r><c>') + 
                 '</c></r>'


SELECT x.value('c[1]','int') AS seq,
       x.value('c[2]','int') AS invoice,
       x.value('c[3]','int') AS amount
FROM @x.nodes('/r') x(x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2011-09-20
    • 2020-02-10
    相关资源
    最近更新 更多