gpt4 book ai didi

sql - 比较两个 PostgreSQL 列,字符串由斜杠 "/"或圆括号 "( )"分隔

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

我是 Rails/PostgreSQL 的新手,只是被这个看似简单的问题困住了。

当一列包含不同语言的同一事物的多个字符串值时,如何比较两列的字符串值,这些字符串值由斜杠“/”或圆括号“()”分隔?

ID |    Drink #1   |     Drink #2
1 | Water | Agua/Water/Eau
2 | Magnesium | Magnesio (Magnesium)

我主要是在寻找一个 PostgreSQL 查询来显示在“饮料 #1 和饮料 #2 都包含水和镁”的 View 中,但我也想知道是否有其他方法可以使用 Controller (MVC 的 C) .我搜索了相关的 Rails Gems,但几个小时后没有成功。

谢谢大家!

最佳答案

简单检查drink1是否是drink2的子串:

select *
from drinks
where drink2 like format('%%%s%%', drink1);

id | drink1 | drink2
----+-----------+----------------------
1 | Water | Agua/Water/Eau
2 | Magnesium | Magnesio (Magnesium)
(2 rows)

检查 drink1 是否严格是 drink2 除以 / 的一部分:

select *
from drinks
where drink1 = any(string_to_array(drink2, '/'));

id | drink1 | drink2
----+--------+----------------
1 | Water | Agua/Water/Eau
(1 row)

检查drink2是否包含括号中的drink1:

select *
from drinks
where drink2 like format('%%(%s)%%', drink1);

id | drink1 | drink2
----+-----------+----------------------
2 | Magnesium | Magnesio (Magnesium)
(1 row)

查询 #2 和 #3 合二为一:

select *
from drinks
where drink1 = any(string_to_array(drink2, '/'))
or drink2 like format('%%(%s)%%', drink1);

id | drink1 | drink2
----+-----------+----------------------
1 | Water | Agua/Water/Eau
2 | Magnesium | Magnesio (Magnesium)
(2 rows)

更新 2015-09-02

drink2 列中有两种语法形式。这些形式可以被视为对称(带斜杠)和不对称(带括号)。您应该将不对称 项目转换为对称 项目。您可以使用函数 replace() and translate() :

select *, replace(translate(drink2, '()', '/'), ' /', '/')
from drinks

id | drink1 | drink2 | replace
----+-----------+----------------------+--------------------
1 | Water | Agua/Water/Eau | Agua/Water/Eau
2 | Magnesium | Magnesio (Magnesium) | Magnesio/Magnesium
(2 rows)

您的查询可能如下所示:

select *
from drinks
where drink1 = any(string_to_array(replace(translate(drink2, '()', '/'), ' /', '/'), '/'));

关于sql - 比较两个 PostgreSQL 列,字符串由斜杠 "/"或圆括号 "( )"分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294768/

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