gpt4 book ai didi

SQL 'ab,cd' 与 'cd,ab' 相比为真

转载 作者:行者123 更新时间:2023-11-29 14:07:10 25 4
gpt4 key购买 nike

我在postgresql有点情况

我有两个表 t1 和 t2,并且都有一个列具有相同类型的数据“col_data”,col_data 可能只有以下数据 ('ab', 'cd', 'ab,cd', 'cd,ab')

我想在 t1.col_data='ab,cd' 和 t2.col_data = 'cd,ab' 时比较 t1.col_data 和 t2.col_data 时返回 TRUE

最佳答案

正确的解决方案是修复您的数据模型,这样您就不会将复合数据作为逗号分隔值存储在文本字段中;见this post .

短期解决方法可能是定义一个“commasep_to_sorted_array”函数,例如:

CREATE OR REPLACE FUNCTION commasep_to_sorted_array(text) RETURNS text[] AS $$
SELECT array_agg(t ORDER BY t) FROM regexp_split_to_table($1,',') t;
$$ LANGUAGE sql IMMUTABLE;

然后在你的比较中使用它:

commasep_to_sorted_array(t1.col_data) = commasep_to_sorted_array(t2.col_data)

不用说,这不是有用的索引。尽管您可以创建一个在某些情况下很有用的表达式索引。

如果您的情况真的像您描述的那样简单,只有四个可能的值,您可能可以将该列转换为枚举:

CREATE TYPE abcd AS ENUM (
'ab', 'cd', 'ab,cd', 'cd,ab'
);

ALTER TABLE mytable ALTER COLUMN col_data TYPE abcd USING (col_data::abcd);

(虽然我真的希望真实姓名比这更能提供信息!)

如果您真的将它们视为两个独立的标志,那么值可以是“既不是 ab 也不是 cd”、“只是 ab”、“只是 cd”或“既是 ab 又是 cd”,那么您应该以这种方式对它们进行建模相反 - 两个 bool 字段、一个位字段或一个您手动测试位的 int 字段。我更喜欢两个 bool 字段,没有充分的理由不这样做。

关于SQL 'ab,cd' 与 'cd,ab' 相比为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23905435/

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