我想将以下字符串拆分为城市,省,邮政编码。 非常感谢您的帮助!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等...)。 –