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