gpt4 book ai didi

sql - 根据多个分隔符拆分记录

转载 作者:行者123 更新时间:2023-11-29 12:30:23 25 4
gpt4 key购买 nike

我正在尝试在 PostgreSQL 中准备查询。

以下是我的输入:

enter image description here

在这里你可以发现在Field column中有一个唯一的值,在Values列中有多个分隔符的值。

现在我想要下面的输出。

enter image description here

步骤如下:

  1. 第一个值应使用";" 分隔并使用SplitFields
  2. 生成新列
  3. Spitalfields 我们必须再次将它与 ">>" 分开并且在第一个值应被视为文件夹 和第二个值应被视为值(value)

如何准备查询?

我在 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

最佳答案

这在 Postgres 中要容易得多。您首先需要通过 ; 拆分字符串以创建行,然后使用 string_to_array() 拆分第二级

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;

在线示例:https://rextester.com/IOW62752

关于sql - 根据多个分隔符拆分记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55215815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com