Postgresql选择任何/一切

时间:2017-04-20 22:06:44

标签: postgresql psycopg2

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

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

可以想象,由于没有*的姓氏,因此没有返回任何内容,第二个查询无效。有什么想法吗?

修改

由于我正在做的事情的性质,SELECT name FROM contacts是不够的。我想我可以让它发挥作用,但它会很难看。我希望表中的每一列都有WHERE,但如果搜索任何给定列是空字符串,我希望它能获取表中的每个条目。

2 个答案:

答案 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"}
)

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