2013-06-30 36 views
-1

我列地址,看起来像这样:单独记录到Postgres的表2列

address 
-------------- 
Virginia Ave 
Baker Ave 
Elm Road 
..... 

我需要每个记录分成2 columns.First列将持有街道名称和第二列街道缩略语,因此它看起来就像这样:

StreetName   StreetAbbr 
-----------  ----------- 
Virginia    Ave 
Baker    Ave 
Elm     Road 

什么是最简单,最有效的(我有记录的数量庞大) 做到这一点?

谢谢。

+3

使用常规表达式或substr模式匹配。尝试一些事情,当你靠近时回来,但仍然无法弄清楚。 – Randy

+0

这是*地址规范化问题*的一部分,乍一看似乎是合理的,可以用一堆手写正则表达式来处理。在实践中,做得很好很难,所以如果你需要更普遍的地址规范化考虑,可以考虑查看该地区的现有产品之一。 –

回答

1

假设字符串将是StreetName StreetAbbr,下面的SQL代码也许是你有用,我不知道,这是最有效的,但工程:

CREATE TABLE TEST(
    ADDRESS VARCHAR(100)); 

INSERT INTO TEST(ADDRESS) VALUES('Virginia Ave'); 
INSERT INTO TEST(ADDRESS) VALUES('Baker Ave'); 
INSERT INTO TEST(ADDRESS) VALUES('Elm Road'); 

SELECT 
(string_to_array(ADDRESS, ' '))[1] AS StreetName, 
(string_to_array(ADDRESS, ' '))[2] AS StreetAbbr 
FROM TEST; 

这里是LINK与这个例子。您也可以使用正则表达式或字符串简单函数来完成此操作(请参阅link)。无论如何,在做所有这些之前,你应该记住标准化

+1

它对现实世界的数据变得更加复杂:即插入到测试(地址)值('Martin Luther King Jr. Way');' – house9

+0

那么在这种情况下,要复杂得多,必须识别要分离的模式字符串。他的例子似乎更简单一些。 –

+0

谢谢大家的回复。 – user18110