Postgresql新手在这里。
我有一个整数表,如下所示:
1950018111211111111111111
1940490521222211111111111
我要做的是left
上面的那些,前7个数字保持为1,其余数字分成如下的序列号,其余的数字在整数:
1 1950018 1
2 1950018 1
3 1950018 1
4 1950018 2...
.
.
19 1940490 5
20 1940490 2...
等等。我知道我们可以使用left()
函数来分割前七个数字,但我不知道如何继续。任何帮助将不胜感激
答案 0 :(得分:1)
我相信以下内容可以满足您的需求:
SELECT
row_number() over() as rownumber,
intToRows.*
FROM
(
SELECT
left(field, 7),
unnest(string_to_array(right(field, length(field)-7) ,NULL))
FROM
table
) as intToRows
这使用string_to_array
将字符串拆分为值数组。我们在此声明NULL
的分隔符,以便分割每个字符。 unnest
函数接受该数组并将每个元素转换为记录。
row_number() over() as rownumber
位将来自intToRows
派生表的元素的原始编号添加到父查询的输出中以匹配您的示例。如果不需要那么你可以在FROM
子句中使用子查询并完成它。
答案 1 :(得分:1)
我希望这能满足你的要求:
SELECT
row_number() over () as no, text1, text2
FROM
(SELECT substring(column1,1,7) as text1,
regexp_split_to_table(substring(column1,8),'|') as text2
FROM
table
) AS temptable
文本" regexp_split_to_table(substring(column1,8),' |')"将每个字符的文本拆分为一个表格。或者你可以使用其他如
regexp_split_to_table(substring(column1,8),'\\s*')