regex - 用字符串中的子查询结果替换数字

标签 regex postgresql

假设我有一个如下所示的文本字段:

'number: 123 number: 456'

我希望能够用这个查询的结果替换这些数字:

SELECT name FROM table WHERE number = 123;
SELECT name FROM table WHERE number = 456;

返回这个:

'number: apple number: banana'

我有这个查询来识别字符串的整数部分:

select regexp_matches('number: 123 number: 456', '[0-9]{3}', 'g')::int[];

而且我尝试将该查询用作替换语句中的子查询,但我没有任何运气:

select regexp_replace('number: 123 number: 456', '[0-9]{3}', (select name from topics where id::text = regexp_matches('number: 123 number: 456', '[0-9]{3}', 'g')));

最佳答案

当你想替换多个值时,我不太确定你是否可以在一行中执行此操作,但这是一个解决方案,你可以如何执行此操作:

SELECT string_agg(strrpl, ' ') AS myString
FROM
(SELECT CASE WHEN t1.name IS NULL 
            THEN tbl.foo 
            ELSE regexp_replace(tbl.foo, t1.id::text, t1.name) END AS strrpl
FROM t1
RIGHT JOIN (SELECT foo FROM regexp_split_to_table((SELECT string 
                                                   FROM t2 
                                                   WHERE id = 1), E'\\s+') AS foo) as tbl
ON tbl.foo ~~ t1.id::text) AS boo;

在这里,我将您的字符串放入表中,然后从那里选择它们。

我还创建了 SQL Fiddle这样您就可以检查它是如何工作的...

这里的主要技巧是我将字符串拆分成一个表。这行代码:

SELECT foo FROM regexp_split_to_table((SELECT string 
                                       FROM t2 
                                       WHERE id = 1), E'\\s+') AS foo

基本上,此查询将字符串分隔到一个表中,其中字符串中的每个单词都成为表中的一行。 Look HERE!

然后我做了一个 RIGHT JOIN(因为我首先选择 FROM t1)并将 t1 中的每个名称与我们在将字符串拆分到表时得到的表中的相应数字连接起来。 Look HERE!

之后,我将拆分字符串(foo 表)时得到的列中的值替换为来自 t1 的单词,但是如果我们从 t1 中选择的列中的值为 NULL,我们希望保留 foo 列中的值...这条线在这里

SELECT CASE WHEN t1.name IS NULL 
            THEN tbl.foo 
            ELSE regexp_replace(tbl.foo, t1.id::text, t1.name) END

SQL Fiddle为此……

最后我们需要从我们得到的这一列中再次创建一个字符串。我们使用 string_agg 函数...

GL!

关于regex - 用字符串中的子查询结果替换数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583208/

相关文章:

有效选择非完美重复项的 SQL 查询

使用 IN 与 NOT IN 时 Postgresql 的巨大性能差异

Java正则表达式选择字符串中的开始和结束引号

python - 替换Python文件中一行中的单词

python - 如何在 Python 中查找并替换每行特定字符后面的文本?

regex - 使用 Neo4j Cypher 查询进行全局匹配正则表达式

python - 条件如果字符串仅包含变量和整数Python

postgresql - 如何将 CSV 复制为 JSON 字段

postgresql - 您如何有效地确定 Postgres 表是否有行

ruby-on-rails - Rails 默认为定义的值