【问题标题】:SQL Split Comma Seperated Strings Into Multiple ColumnsSQL 将逗号分隔的字符串拆分为多列
【发布时间】:2013-06-11 13:11:26
【问题描述】:

我对 SQL 很陌生,请原谅我的无知。我有一个名为“temp”的表,其中包含一个字段(称为 Field1),其中包含行和行以逗号分隔的长字符串,因此:

Temp table
Field1
ABC123,1,Z,some text
ABC456,1,q,some text
ABC789,1,r,some text
ABC111,1,y,some text

然后我有另一个表,称为详细信息,有 4 个标题。那么如何将上述内容从临时表插入到临时表中,如下所示:

Detail Table
Field1          Field 2    Field 3          Field 4
ABC123         1             Z                 some text
ABC456         1             q                 some text 
ABC789          1            r                  some text
ABC111         1            y                 some text 

然后,我将使用报告报告服务来报告详细信息表。我需要调用一个函数吗?我一直在阅读,有些人说 XML 函数更好?我所有其他代码都在 SP 中,所以我如何从这里调用它?

提前感谢您的帮助。

问候,

迈克尔

【问题讨论】:

  • 您没有指定 RDBMS,但这个问题有多个重复项,均显示在右侧:SQL Server (stackoverflow.com/questions/9589282/…stackoverflow.com/questions/16722307/…)、MySQL (@987654323 @) 等......
  • 你为什么不把它变成 .csv 格式并使用 SSIS 将它通过管道传输到一个表中 - 它必须保存在一个临时表中吗?
  • 这个问题没有显示任何研究工作。 做好功课很重要。告诉我们您发现了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案。 FAQ.
  • 我必须把它放在一个临时表中才能启动,因为文件来自旧系统,其中一些字段有双引号,而有些则没有。 SQL 指定数据字段中的任何值或所有值都用引号 ("") 括起来,所以我首先导入临时表,然后清理以删除 ""。

标签: sql sql-server-2008 csv


【解决方案1】:

您使用的数据库有很大的不同。以下是如何在 MySQL 中执行此操作的示例:

insert into detail(field1, field2, field3, field4)
    select substring_index(field1, 1),
           reverse(substring_index(reverse(substring_index(field1, 2)))),
           reverse(substring_index(reverse(substring_index(field1, 3)))),
           reverse(substring_index(reverse(substring_index(field1, 4))))
    from tempTable t

2-4 个字段的复杂表达式只是从列表中提取第 n 项的一种方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    相关资源
    最近更新 更多