多次拆分并分配order_id

时间:2015-09-17 21:52:48

标签: sql postgresql split

我有一些需要针对每个组件进行分析的地址字符串。

SQL Fiddle Demo

library(dplyr)
countries<-c("USSR","Uganda","Ukraine")
tmp<-data.frame(countries,stringsAsFactors=F)
tmp %>% arrange(countries) #orders it one way
tmp[order(tmp$countries),] #orders it another way
sort(tmp$countries) #sort agrees with order

所以我需要按照不同的字符进行拆分,例如(CREATE TABLE Table1 ("ID" int, "address" varchar(41)); INSERT INTO Table1 ("ID", "address") VALUES (1, 'calle 15, lomas del avila'), (2, 'calle av. solano edif:Apalache apt-15'); .,:;<space>)< / p>

对于一个角色,我知道该怎么做。

-

如何连锁多个以及如何分配OrderID?

SELECT ID, s.token
FROM   Table1 t, unnest(string_to_array(t.address, ' ')) s(token);

对于此示例,第二行| ID | token | orderID |----|---------------|-------- | 1 | calle | 1 | 1 | 15, | 2 | 1 | lomas | 3 | 1 | del | 4 | 1 | avila | 5 | 2 | calle | 1 | 2 | av. | 2 | 2 | solano | 3 | 2 | edif:Apalache | 4 | 2 | apt-15 | 5 将分为15,15,因此第二个结果可以放弃,订单不会发生变化。

但在最后两行nulledif:Apalache中,第二次拆分将产生apt-15edifApalacheapt所以orderID将从4到7:

15

1 个答案:

答案 0 :(得分:2)

使用translate()

SELECT "ID", token, row_number() over (partition by "ID")
FROM (
    SELECT "ID", s.token
    FROM   
        Table1 t, 
        unnest(string_to_array(translate(t.address, '.,:;-', '     '), ' ')) 
            s(token)
    WHERE token <> ''
    ) sub

SqlFiddle