gpt4 book ai didi

sql - PostgreSQL 在字符串列中搜索子字符串列表

转载 作者:行者123 更新时间:2023-12-02 22:19:16 24 4
gpt4 key购买 nike

我在 postreSQL 数据库中有下表(为了清晰起见进行了简化):

  | serverdate |           name | value 
|-------------------------------------
0 | 2019-12-01 | A LOC 123 DISP | 1
1 | 2019-12-01 | B LOC 456 DISP | 2
2 | 2019-12-01 | C LOC 777 DISP | 0
3 | 2019-12-01 | D LOC 000 DISP | 10
4 | 2019-12-01 | A LOC 700 DISP | 123
5 | 2019-12-01 | F LOC 777 DISP | 8

name 列的类型为字符串。子字符串 LOCDISP 可以具有不同长度的其他值,但本问题不感兴趣。

问题:我想选择仅包含特定子字符串的行。有几个子字符串,作为 ARRAY 传递,格式如下:

['A_123', 'F_777'] # this is an example only

我想要选择包含子字符串第一部分(用下划线“_”分隔)以及第二部分的所有行。在此示例中,对于上述数组,我应该获得第 0 行和第 5 行(因为它们是唯一在两个部分中都完全匹配的行):

  | serverdate |           name | value 
|-------------------------------------
0 | 2019-12-01 | A LOC 123 DISP | 1
5 | 2019-12-01 | F LOC 777 DISP | 8

第 4 行的子字符串的第一部分正确,但另一部分不正确,因此不应返回它。与第 2 行相同(仅第二部分匹配)。

这个查询如何完成?我对 SQL 还比较陌生。

此查询是 Python 中进程的一部分,因此我可以根据需要调整输入参数(子字符串数组),但行为必须与所描述的相同。

谢谢!

最佳答案

您是否尝试过使用 regexp_replace 和子查询?

SELECT * FROM 
(SELECT serverdate, substring(name from 1 for 1)||'_'||
regexp_replace(name, '\D*', '', 'g') AS name, value
FROM t) j
WHERE name IN('A_123', 'F_777');

或者使用 CTE

WITH j AS (
SELECT serverdate, substring(name from 1 for 1)||'_'||
regexp_replace(name, '\D*', '', 'g') AS name2,
value,name
FROM t
) SELECT serverdate,name,value FROM j
WHERE name2 IN('A_123', 'F_777');


serverdate | name | value
------------+----------------+-------
2019-12-01 | A LOC 123 DISP | 1
2019-12-01 | F LOC 777 DISP | 8
(2 Zeilen)

关于sql - PostgreSQL 在字符串列中搜索子字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59308568/

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