Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql-删除子字符串中的所有空格_Sql_Regex_Postgresql - Fatal编程技术网

Postgresql-删除子字符串中的所有空格

Postgresql-删除子字符串中的所有空格,sql,regex,postgresql,Sql,Regex,Postgresql,如何从字符串的子字符串中删除任何空白 例如,我有这个号码“+370650 12345”。我需要所有的数字都有这个格式,比如:+370 65012345。您如何使用PostgreSQL实现这一点 我可以使用trim()函数,但它会删除所有空白。如果您能够假设国家代码始终存在,您可以尝试使用正则表达式捕获感兴趣的部分。假设您的电话号码存储在名为content的表中名为numbers的列中,您可以尝试以下操作: SELECT parts[1] || ' ' || parts[2] || parts[3

如何从字符串的子字符串中删除任何空白

例如,我有这个号码“+370650 12345”。我需要所有的数字都有这个格式,比如:
+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位。。。