2017-10-21 69 views
0

我想将以下字符串拆分为城市,省,邮政编码。 非常感谢您的帮助!SQL - re.split:BY逗号然后空格

说明:按逗号分割,然后按空格分割一次。

A = 'Vaughan, ON L6D 9X0' 

结果:

(Vaughan, ON, L6D9X0) 

尝试:

re.split(',|/s[1]', A) 
+1

标记您使用的RDBMS(MySQL,MS SQL Server,Orcale等...)。 –

回答

0

IF,你与MicrosoftSQL Server工作,那么你可以使用SUBSTRING()& CHARINDEX()函数来查找特定Char索引来拆分string值。

SELECT SUBSTRING(<column>, 1, CHARINDEX(',', <column>)-1) City, 
     SUBSTRING(SUBSTRING(<column>, CHARINDEX(' ', <column>)+1, LEN(<column>)), 1, CHARINDEX(' ', SUBSTRING(<column>, CHARINDEX(' ', <column>)+1, LEN(<column>)))) Province, 
     SUBSTRING(SUBSTRING(<column>, CHARINDEX(' ', <column>)+1, LEN(<column>)), CHARINDEX(' ', SUBSTRING(<column>, CHARINDEX(' ', <column>)+1, LEN(<column>)))+1, LEN(<column>)) [Postal Code]; 

所需的输出:

City  Province Postal Code 
Vaughan ON   L6D 9X0 
0

试试这个,

这个数值的选择为行,也许你可以支点的CTE C2同样为了得到它作为列

WITH CTE 
AS 
(
    SELECT 
    1 Seq, 
    'Vaughan, ON L6D 9X0' "Txt" 

    UNION ALL 

    SELECT 
    Seq+1 "Seq", 
    Txt = CASE WHEN Txt LIKE '% %' 
       THEN LTRIM(RTRIM(SUBSTRING(Txt,CHARINDEX(' ',Txt),LEN(Txt)))) 
      ELSE NULL END 
    FROM CTE 
     WHERE ISNULL(txt,'')<>'' 
),C2 
AS 
(
SELECT 
    CASE Seq 
    WHEN 1 THEN 'City' 
    WHEN 2 THEN 'Province' 
    ELSE 'PostalCode' END "Head", 
    CASE Seq 
    WHEN 1 
     THEN SUBSTRING(Txt,1,CHARINDEX(',',Txt)-1) 
    WHEN 2 
     THEN SUBSTRING(Txt,1,CHARINDEX(' ',Txt)-1) 
    ELSE Txt END "Txt" 
    FROM CTE 
    WHERE Seq<4 
) 
SELECT 
    * 
    FROM C2; 

如果您有多行需要以同样的方式解析,那么您可以在第1个CTE的select语句中给出相同的结果,在这种情况下,第一个select的Seq逻辑可能需要更改。按照以上所述,输出将是如下

Sample Output

0

在Postgres可以做,使用:

select split_part(a, ',', 1) as city, 
     left(trim(split_part(a,',',2)), strpos(trim(split_part(a,',',2)), ' ')), 
     substr(trim(split_part(a,',',2)) as province, strpos(trim(split_part(a,',',2)), ' ') + 1) as postal_code 
from the_table; 

这可以更加可读一点通过使用派生表:

select city, 
     left(second_part, strpos(second_part, ' ')) as province, 
     substr(second_part, strpos(second_part, ' ') + 1) as postal_code 
from (
    select split_part(a, ',', 1) as city, 
     trim(split_part(a, ',', 2)) as second_part 
    from the_table 
) t