Postgresql Select 任何东西/一切

Postgresql Select anything / everything

我正在为 Postgres 创建一个搜索工具。它将有多个文本条目(每个 table 列一个)。当文本条目为空时,我希望查询匹配每个 table 条目。这可能吗?我试过:

SELECT name FROM contacts WHERE surname = '*';
SELECT name FROM contacts WHERE surname = *;

如你所想,这个returns没什么,因为没有*的姓氏,第二次查询无效。有什么想法吗?

编辑:

由于我正在做的事情的性质,SELECT name FROM contacts 是不够的。我想我可以让它工作,但它会很难看。我想要 table 中每一列的 WHERE,但是如果对任何给定列的搜索是空字符串,我希望它获取 table.[=14 中的每个条目=]

好的,所以我找到了答案 here。正确的代码是:

SELECT name FROM contacts WHERE surname ~* ''; 

returns 所有条目

SELECT name FROM contacts WHERE surname ~* 'John Doe'; 

returns 个姓氏为 John Doe 的条目。

I want the query to match each and every table entry

只需使用 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"}
)

至于你的回答,你用的是正则表达式匹配。在你从未提及的问题中。所以我认为这不是你想要的。正则表达式有特定的语法,如果在文本条目中输入了一些无效的正则表达式格式,查询将失败。