我有一些需要针对每个组件进行分析的地址字符串。
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
,因此第二个结果可以放弃,订单不会发生变化。
但在最后两行null
和edif:Apalache
中,第二次拆分将产生apt-15
,edif
,Apalache
和apt
所以orderID将从4到7:
15
答案 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