在Postgresql中拆分整数表

时间:2014-10-23 15:34:54

标签: sql postgresql

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()函数来分割前七个数字,但我不知道如何继续。任何帮助将不胜感激

2 个答案:

答案 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子句中使用子查询并完成它。

SQLFiddle

答案 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*') 

PostgreSQL functions-matching