我想將以下字符串拆分爲城市,省,郵政編碼。 非常感謝您的幫助!SQL - re.split:BY逗號然後空格
說明:按逗號分割,然後按空格分割一次。
A = 'Vaughan, ON L6D 9X0'
結果:
(Vaughan, ON, L6D9X0)
嘗試:
re.split(',|/s[1]', A)
我想將以下字符串拆分爲城市,省,郵政編碼。 非常感謝您的幫助!SQL - re.split:BY逗號然後空格
說明:按逗號分割,然後按空格分割一次。
A = 'Vaughan, ON L6D 9X0'
結果:
(Vaughan, ON, L6D9X0)
嘗試:
re.split(',|/s[1]', A)
IF,你與Microsoft
SQL 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
試試這個,
這個數值的選擇爲行,也許你可以支點的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邏輯可能需要更改。按照以上所述,輸出將是如下
在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
標記您使用的RDBMS(MySQL,MS SQL Server,Orcale等...)。 –