PostgreSQL查询为何无法匹配表中对象?如何按email查询jsonb列用户
报错原因
- PostgreSQL 原生 SQL 语法不支持
==作为相等判断运算符,仅支持单等号=,这是你收到「==不是合法符号」报错的直接原因。 - 你使用
->操作符提取 jsonb 字段的返回值为 jsonb 类型,直接和字符串类型的查询参数$1做比较会触发类型不匹配错误,也就是你收到的「命令不存在」类报错。
正确查询写法
提取 jsonb 字段的文本值需要使用 ->> 操作符,该操作符返回值为 text 类型,可直接和字符串做各类匹配判断。
精确匹配邮箱
SELECT userAccount FROM users WHERE userAccount->>'email' = $1;
模糊匹配邮箱
-- $1 可传入带通配符的字符串,比如 '%@gmail.com' SELECT userAccount FROM users WHERE userAccount->>'email' LIKE $1;
大小写不敏感正则匹配
-- $1 可传入正则表达式,匹配逻辑不区分大小写 SELECT userAccount FROM users WHERE userAccount->>'email' ~* $1;
内容的提问来源于stack exchange,提问作者newGrad coder
相关产品推荐
相关产品推荐

