比较字段和值并返回布尔值

17
我正试图将哈希检查从服务器应用程序移至PostgreSQL。 换句话说,我需要调用一个查询到PGSQL,该查询将查询字符串与字段字符串进行比较,并将相等比较的结果作为布尔值返回,但我不知道如何在纯SQL上实现这一点。
更新:我有一个名为 users 的表,其中包含字段 password (目前为 text ,未来为 bytea )。我想写类似于以下内容的东西
select * from values ('WrittenPassword' = users.password) where username = 'someuser' ,

其必须返回true或false作为相等比较的结果.


1
SELECT fieldname = 'hashvalue' AS alias ... - zerkms
问题不够明确。提供更多细节并发布您已经拥有的代码将会有所帮助。 - lanzz
将字段中的字符串与另一个指定字符串进行比较。 - Arman Hayots
@ArmanStepanyan:不要太快挑剔:提问的人可能比你更了解原问题。 - wildplasser
1个回答

34

您可以使用CASE语句根据条件返回特定的值:

SELECT 
    (CASE WHEN password = 'WrittenPassword' THEN 1 ELSE 0 END) AS is_equal
FROM
    users
WHERE
    username = 'someuser'

2
当用户名不存在时,查询会返回什么?好的?没有可比较的内容,好的?请查询“三值逻辑”,好的? - wildplasser
2
@wildplasser,如果用户名不存在,则不会返回任何行,因为WHERE子句将过滤它。否则,如果用户确实存在,则密码只能等于或不等于输入字符串,因此您必须获得0或1。 - Zane Bien
2
我知道(我认为你也知道),但结果取决于调用者如何处理三值逻辑(NULL:=“未返回行”)。OP不理解这一点,而是采用了口语化的说法。当存在三值逻辑时,我们将不得不制定更精确的公式。 - wildplasser
1
如果我得到了null,它只是不会将我的代码中的结果标志从false更改为true(我使用bool.TryParse()而不是Parse())。空值不能是密码的正确值。 - Arman Hayots
你可以随时添加针对NULL的逻辑,例如使用OR或AND的IF(col IS NULL)。显然,你也可以为IF(col IS NOT NULL)做同样的事情。 - JosephDoggie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接