Postgresql-删除子字符串中的所有空格
如何从字符串的子字符串中删除任何空白 例如,我有这个号码“+370650 12345”。我需要所有的数字都有这个格式,比如:Postgresql-删除子字符串中的所有空格,sql,regex,postgresql,Sql,Regex,Postgresql,如何从字符串的子字符串中删除任何空白 例如,我有这个号码“+370650 12345”。我需要所有的数字都有这个格式,比如:+370 65012345。您如何使用PostgreSQL实现这一点 我可以使用trim()函数,但它会删除所有空白。如果您能够假设国家代码始终存在,您可以尝试使用正则表达式捕获感兴趣的部分。假设您的电话号码存储在名为content的表中名为numbers的列中,您可以尝试以下操作: SELECT parts[1] || ' ' || parts[2] || parts[3
+370 65012345
。您如何使用PostgreSQL实现这一点
我可以使用
trim()
函数,但它会删除所有空白。如果您能够假设国家代码始终存在,您可以尝试使用正则表达式捕获感兴趣的部分。假设您的电话号码存储在名为content
的表中名为numbers
的列中,您可以尝试以下操作:
SELECT parts[1] || ' ' || parts[2] || parts[3]
FROM (
SELECT
regexp_matches(content, E'^\\s*(\\+\\d+)\\s+(\\d+)\\s+(\\d+)\\s*$') AS parts
FROM numbers
) t;
假设列名为
电话号码
:
left(phone_number, strpos(phone_number, ' '))
||regexp_replace(substr(phone_number, strpos(phone_number, ' ') + 1), ' ', '', 'g')
它首先将所有内容保留到第一个空格,然后将其与替换字符串其余部分的所有空格的结果连接起来
如果您还需要处理除空格以外的其他空格,则可以使用
'\s'
作为regexp\u replace()
中的搜索值,即使缺少国家代码(),以下内容也会起作用:
返回:+370 65012345
SELECT TRIM(REPLACE(REPLACE(REGEXP_REPLACE('370 650 12345', '^((\+\d+)\s+)?(.*)$', '\1|\3'), ' ', ''), '|', ' '));
返回:37065012345
SELECT TRIM(REPLACE(REPLACE(REGEXP_REPLACE('370 650 12345', '^((\+\d+)\s+)?(.*)$', '\1|\3'), ' ', ''), '|', ' '));
它在开头查找国家代码(一组以
+
符号开头的数字),并用管道|
替换该代码后面的任何空格。然后,它将结果字符串中的所有空格替换为空字符串,然后将出现的|
替换为空格!|
的选择是任意的,我想它可以是任何非数字字符。所有数字都有国家代码吗?如果是这样,您可以将空格替换为“”,然后使用字符串函数将其放回第4位。。。