gpt4 book ai didi

sql - 在 SQL 中列出的文本

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

有什么方法可以将逗号分隔的文本值转换为列表,以便我可以在 SQL 中将其与“IN”一起使用?我为此使用了 PostgreSQL。

例如:

select location from tbl where 
location in (replace(replace(replace('[Location].[SG],[Location].[PH]', ',[Location].[', ','''), '[Location].[', ''''), ']',''''))

这个查询:

select (replace(replace(replace('[Location].[SG],[Location].[PH]', ',[Location].[', ','''), '[Location].[', ''''), ']',''''))

产生'SG','PH'

我想产生这个查询:

select location from tbl where location in ('SG','PH')

当我执行第一个查询时没有任何返回。该表已填充位置值“SG”和“PH”。

任何人都可以帮助我如何在不使用 PL/pgSQL 的情况下完成这项工作吗?

最佳答案

因此,您面对的是一个友好易于使用的工具,但它无法让您完成任何工作,我感到您很痛苦。

对您与 string_to_array 结合的内容稍作修改应该能够完成工作。

首先,我们将用更好的 replace 调用替换嵌套的 replace 调用:

=> select replace(replace(replace('[Location].[SG],[Location].[PH]', '[Location].', ''), '[', ''), ']', '');
replace
---------
SG,PH

因此,我们去除了 [Location]. 噪声,然后去除了剩余的方括号,以得到一个以逗号分隔的双字符位置代码列表。还有其他方法可以使用 PostgreSQL 的其他 string and regex 获取 SG,PH功能,但 replace(replace(replace(... 将适用于具有您的特定结构的字符串。

然后我们可以使用 string_to_array 将该 CSV 拆分为一个数组:

=> select string_to_array(replace(replace(replace('[Location].[SG],[Location].[PH]', '[Location].', ''), '[', ''), ']', ''), ',');
string_to_array
-----------------
{SG,PH}

给我们一组位置代码。现在我们有了一个数组,我们可以使用 = ANY而不是 IN 来查看数组内部:

=> select 'SG' = any (string_to_array(replace(replace(replace('[Location].[SG],[Location].[PH]', '[Location].', ''), '[', ''), ']', ''), ','));
?column?
----------
t

t 是一个 bool 值 TRUE BTW;如果你说 'XX' = any (...) 你会得到一个 f(即 FALSE)。

将所有这些放在一起得到一个结构如下的最终查询:

select location
from tbl
where location = any (string_to_array(...))

您可以自行填充 ... 嵌套的 replace 内容。

关于sql - 在 SQL 中列出的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866947/

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