我正在为Postgres创建一个搜索工具。它将有几个文本条目(每个表列一个)。当文本条目为空时,我希望查询匹配每个表条目。这可能吗?我试过了:
SELECT name FROM contacts WHERE surname = '*';
SELECT name FROM contacts WHERE surname = *;
可以想象,由于没有*的姓氏,因此没有返回任何内容,第二个查询无效。有什么想法吗?
修改
由于我正在做的事情的性质,SELECT name FROM contacts
是不够的。我想我可以让它发挥作用,但它会很难看。我希望表中的每一列都有WHERE
,但如果搜索任何给定列是空字符串,我希望它能获取表中的每个条目。
答案 0 :(得分:0)
好的,所以我找到了答案here。正确的代码是:
SELECT name FROM contacts WHERE surname ~* '';
返回所有条目
SELECT name FROM contacts WHERE surname ~* 'John Doe';
返回姓氏为John Doe
的条目。
答案 1 :(得分:0)
我希望查询匹配每个表条目
只使用SELECT
而不使用WHERE surname
子句。就这么简单。
SELECT name FROM contacts
但是如果你想使用一个查询,你可以这样做:
cur.execute(
"""SELECT name FROM contacts
WHERE (CASE WHEN %(entry)s != '' THEN surname = %(entry)s ELSE true END)"""
, {'entry': "John Doe"}
)
至于你的答案,你使用正则表达式匹配。在你从未提及的问题中。所以我认为这不是你想要的。正则表达式具有特定语法,如果在文本条目中输入了一些无效的正则表达式格式,则查询将失败。