当前位置: 首页 > 面试题库 >

在SQL中将CSV字段拆分为不同的行

卫志泽
2023-03-14
问题内容

我的一个同事在处理COBOL程序时遇到了此问题,并最终在应用程序级别解决了该问题。我仍然很好奇,是否有可能使用SQL在数据访问级别上解决它。这在某种程度上与另一个问题有关,但是我只想使用ANSI SQL。

我正在寻找一个对包含可变长度CSV行的VARCHAR字段起作用的SQL选择查询。该查询的目的是在其自己的结果集行中拆分每个CSV字段。

这是一个带有模式和数据的示例

CREATE TABLE table1 (`field` varchar(100));

 INSERT INTO table1 (`field`)
      VALUES
             ('Hello,world,!')    ,
             ('Haloa,!')          ,
             ('Have,a,nice,day,!');

这是我想从查询中获得的输出:

Hello
world
!
Haloa
!
Have
a
nice
day
!

所使用的CSV分隔符是逗号,现在我不必担心转义。


问题答案:

据我所知,这是ANSI SQL:

with recursive word_list (field, word, rest, field_id, level) as (             
  select field, 
         substring(field from 1 for position(',' in field) - 1) as word,
         substring(field from position(',' in field) + 1) as rest,
         row_number() over () as field_id,
         1
  from table1
  union all 
  select c.field, 
         case 
            when position(',' in p.rest) = 0 then p.rest
            else substring(p.rest from 1 for position(',' in p.rest) - 1) 
         end as word,
         case 
            when position(',' in p.rest) = 0 then null
            else substring(p.rest from position(',' in p.rest) + 1) 
         end as rest, 
         p.field_id,
         p.level + 1
  from table1 as c
    join word_list p on c.field = p.field and position(',' in p.rest) >= 0
) 
select word
from word_list
order by field_id, level;

这假定infield中的值是唯一的。



 类似资料:
  • 本文向大家介绍SQL字段拆分优化,包括了SQL字段拆分优化的使用技巧和注意事项,需要的朋友参考一下 今天看到一条用函数处理连接的SQL,是群里某位网友的,SQL语句如下: 语句不算复杂,只是执行比较慢,下面是关于这SQL语句的一些信息: --1.SQL执行203条数据 --2.耗时12秒 --3.so_order表的fid字段是字符串集合, --由1-2个字符串组成,用','分隔   通过分析执行

  • 问题内容: 我有桌子: 我想要这样的输出: 问题答案: 如果可以创建一个数字表,其中包含从1到要拆分的最大字段的数字,则可以使用以下解决方案: 请看这里的小提琴。 如果无法创建表,则解决方案可以是: 这里有个小提琴例子。

  • 我有表: 我想要这样的输出:

  • 我有这样一份清单: 如何将此列表拆分为三个变量,每个变量分别保持不变

  • 正在尝试从csv文件中读取数据,将每行拆分为各自的列。 但是,当某个列本身带有逗号时,我的正则表达式就失败了。 例如:a, b, c,"d, e, g,", f 我想要的结果是: 也就是5列。 下面是用逗号分隔字符串的正则表达式am ,(?=(?:“[^”]?(?:[^”])*)),(?=[^”](?:,),$) 但是它对少数字符串失败,而对其他字符串有效。 我想要的是,当我使用pyspark将c

  • 我在csv文件中有一个列,其中包含此格式的人员详细信息: 实际csv格式: 我想将它们拆分为一个新的csv文件,如下所示: 拆分详细信息: 拆分行分隔符: