如何从字符串的子字符串中删除任何空格?
例如,我有这个号码' +370 650 12345'。我需要所有数字都具有此格式country_code rest_of_the_number
或在该示例中:+370 65012345
。你怎么能用PostgreSQL实现呢?
我可以使用trim()
函数,但它会删除所有空格。
答案 0 :(得分:1)
假设该列名为phone_number
:
left(phone_number, strpos(phone_number, ' '))
||regexp_replace(substr(phone_number, strpos(phone_number, ' ') + 1), ' ', '', 'g')
它首先将所有内容都放到第一个空格,然后将其与从字符串的其余部分替换所有空格的结果连接起来。
如果您还需要处理其他空格而不仅仅是空格,则可以使用'\s'
作为regexp_replace()
答案 1 :(得分:0)
如果您能够假设国家/地区代码始终存在,则可以尝试使用正则表达式来捕获感兴趣的部分。假设您的电话号码存储在名为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;
答案 2 :(得分:0)
即使国家/地区代码不存在(see SQL Fiddle Demo here),以下内容仍然有效:
SELECT TRIM(REPLACE(REPLACE(REGEXP_REPLACE('+370 650 12345', '^((\+\d+)\s+)?(.*)$', '\1|\3'), ' ', ''), '|', ' '));
返回:+370 65012345
SELECT TRIM(REPLACE(REPLACE(REGEXP_REPLACE('370 650 12345', '^((\+\d+)\s+)?(.*)$', '\1|\3'), ' ', ''), '|', ' '));
返回:37065012345
它在开头查找国家/地区代码(一组以+
开头的数字),并使用管道|
替换该代码后面的任何空格。然后它用空字符串替换结果字符串中的所有空格,然后用空格替换|
的出现次数! |
的选择是任意的,我想它可以是任何非数字字符。