Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于多分隔符的拆分记录_Sql_Postgresql_Split - Fatal编程技术网

Sql 基于多分隔符的拆分记录

Sql 基于多分隔符的拆分记录,sql,postgresql,split,Sql,Postgresql,Split,我正在尝试用PostgreSQL准备一个查询 以下是我的意见: 在这里,您可以发现in Field列具有唯一的值,Values列具有带多个分隔符的值 现在我想要下面的输出 以下是步骤: 第一个值应与分隔;并使用SplitFields生成新列 从Spitalfields中,我们必须再次用>>将其分隔开来,其中第一个值应视为文件夹,第二个值应视为值 如何准备查询 我在SQL server中准备了相同的查询,但在PostgreSQL中,它不适合我,因为我不知道PostgreSQL 以下是对SQL Se

我正在尝试用PostgreSQL准备一个查询

以下是我的意见:

在这里,您可以发现in Field列具有唯一的值,Values列具有带多个分隔符的值

现在我想要下面的输出

以下是步骤:

第一个值应与分隔;并使用SplitFields生成新列 从Spitalfields中,我们必须再次用>>将其分隔开来,其中第一个值应视为文件夹,第二个值应视为值 如何准备查询

我在SQL server中准备了相同的查询,但在PostgreSQL中,它不适合我,因为我不知道PostgreSQL

以下是对SQL Server的查询:

DECLARE @String varchar(1000)
SELECT
  @String = 'AV»ABC1; AC»ACTag; BB»BB1Tag; SampleInner»STag1; Not Privileged (RS)»Priv1tag; Winter 2015 Review»Windter1Tag'
SELECT
  *,
  LEFT(VALUE, CHARINDEX('»', VALUE) - 1) AS firstname,
  SUBSTRING(VALUE, CHARINDEX('»', VALUE) + 1, LEN(VALUE) - (CHARINDEX('»', VALUE) - 1)) AS lastname
FROM (SELECT
  SUBSTRING(';' + @String + ';', Number + 1,
  CHARINDEX(';', ';' + @String + ';', Number + 1) - Number - 1) AS VALUE
FROM master..spt_values
WHERE Type = 'P'
AND Number <= LEN(';' + @String + ';') - 1
AND SUBSTRING(';' + @String + ';', Number, 1) = ';') AS A

这在研究生中更容易。首先需要将字符串拆分为;要创建行,请使用字符串到数组来拆分第二级

select field, 
       elements[1] as folder, 
       elements[2] as value
from (
   select t.field, "values", string_to_array(x.elements, '»') as elements
   from the_table t
      cross join unnest(string_to_array(t."values", ';')) as x(elements)
) x;
或者,如果需要保留第一级拆分:

select field, 
       splitfields,
       split_part(splitfields, '»', 1) as folder, 
       split_part(splitfields, '»', 2) as value 
from (
   select t.field, "values", x.splitfields
   from the_table t
      cross join unnest(string_to_array(t."values", ';')) as x(splitfields)
) x;

在线示例:

这在Postgres中更容易。首先需要将字符串拆分为;要创建行,请使用字符串到数组来拆分第二级

select field, 
       elements[1] as folder, 
       elements[2] as value
from (
   select t.field, "values", string_to_array(x.elements, '»') as elements
   from the_table t
      cross join unnest(string_to_array(t."values", ';')) as x(elements)
) x;
或者,如果需要保留第一级拆分:

select field, 
       splitfields,
       split_part(splitfields, '»', 1) as folder, 
       split_part(splitfields, '»', 2) as value 
from (
   select t.field, "values", x.splitfields
   from the_table t
      cross join unnest(string_to_array(t."values", ';')) as x(splitfields)
) x;

在线示例:

这不是一项简单的研究文档的任务吗?@UweKeim:我已经阅读了文档,也开始准备一个查询,但我希望有一个导出帮助我尽快解决问题,同时我也在准备查询。格式文本的样本数据比图像更受欢迎。这不是一项简单的研究文档的任务吗?@UweKeim:我已经阅读了文档,也开始准备查询,但我需要一个导出来帮助我尽快解决问题,同时我也在准备查询。格式文本的样本数据比图像更受欢迎。我再次需要您的帮助,我需要一些修改,请你根据更新后的问题来帮助我。@ChetanSanghani:当你得到答案时,请不要改变你的问题。改为问一个新问题。你可以链接回这个@a_horse_,名称:谢谢,我会发布新问题。我添加了一个新问题,请在下面的链接中找到,你的帮助将非常感谢。我再次需要你的帮助,我需要一些修改,请你根据更新后的问题来帮助我。@ChetanSanghani:当你得到答案时,请不要改变你的问题。改为问一个新问题。你可以链接回这个@a_horse_,名称为:谢谢,我会发布新问题。我添加了一个新问题,请在下面找到链接,我们将非常感谢你的帮助。