2017-10-21 64 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