gpt4 book ai didi

sql - postgresql 中的 boolean 通配符

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

我有一个参数化的 postgresql 查询,用户可以通过 PHP 前端与之交互。其中一个参数涉及 boolean 值,我想为用户提供“True”、“False”、“Unknown”(Null)或“Doesn't matter”(返回任何结果)的选项。

重写实际查询不是一个选项(参数化查询存储在数据库表中,而不是 PHP 代码中),所以我需要一个 boolean 值“任何”。

换句话说,无论“boolean_column”的值如何,我可以在此查询中为“:parameter1”分配什么值来获取任何行?

SELECT some_column, some_other_column
FROM some_table
WHERE boolean_column = :parameter1

编辑:我需要澄清——可以重写查询,但是程序不能重写查询(即,我不能删除或重写 where在运行时响应用户输入的子句)。

EDIT2:这是我的最终解决方案(感谢 couling!)

SELECT some_column, some_other_column
FROM some_table
WHERE (:parameter1::text = 'any' OR boolean_column = :parameter1::boolean)

当然,程序必须将可能的值限制为“any”或可以转换为 boolean 值的字符串值(例如,“true”、“t”、“false”、“f”)。

EDIT3:之前的解决方案在带有 PDO 的 PHP 中工作,但由于某些原因不适用于 python 的 psycopg2 或直接在 postgresql 中。我尝试了 case 语句的变体,如下所示:

SELECT some_column, some_other_column
FROM some_table
WHERE (CASE WHEN :parameter1::text in ('true', 'false') THEN boolean_column = :parameter1::boolean ELSE TRUE END)

但这也行不通。似乎无论如何,我都无法阻止 postgresql 尝试评估“:parameter1::boolean”,即使它在错误的 WHEN 条件下也是如此。这是一个真正的泡菜......

最佳答案

那么您的查询必须更改。 boolean 值有两个值 truefalse,null 永远不会等于任何东西(即使 null 也不等于 null)。

你当然可以使用:

SELECT some_column, some_other_column
FROM some_table
WHERE (boolean_column = :parameter1 OR :parameter1 is null)

关于sql - postgresql 中的 boolean 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018613/

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