Postgres报operator does not exist: bigint == integer 如何比较row_number与数值
报错根因
- PostgreSQL 的SQL语法中,相等比较只能使用单等号
=,不支持双等号==,这是本次报错的核心原因,和bigint、integer的类型差异无关。 - 你尝试类型转换后问题未解决,是因为没有修正运算符的语法错误。
正确实现代码
create table gps (laf int, "timestamp" timestamp); -- 写法1:无需显式类型转换,PostgreSQL会自动兼容两种数值类型的比较 select * from (select *, row_number() over() as row_num from gps) as yo where row_num = 10;
如果有特殊场景需要显式对齐类型,可以使用如下写法:
-- 写法2:显式转换类型的实现 select * from (select *, row_number() over() as row_num from gps) as yo where row_num = cast(10 as bigint); -- 也可以用PostgreSQL特有的简写语法:10::bigint
注意事项
窗口函数row_number() over()返回的默认列名并不是row_number,建议手动指定别名后再在外层查询引用,避免出现列不存在的报错。
内容的提问来源于stack exchange,提问作者rogerdpack
相关产品推荐
相关产品推荐

