gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:56:37 25 4
gpt4 key购买 nike

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

'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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com