首页 > 解决方案 > Postgres将字符串与数字进行比较返回正确的结果

问题描述

试图了解 postgres 如何将字符串与数字进行比较,因为以下查询返回 true,

SELECT 1 WHERE '1' = 1
SELECT 1 WHERE '1' <= 10
SELECT 1 WHERE '1' BETWEEN 1 and 10
SELECT 1 WHERE 1 BETWEEN '1' and '10'

有人可以解释一下吗?

标签: sqlpostgresql

解决方案


PostgreSQL 在必要和可能的情况下应用隐式转换。据我所知,它是如何做到的,没有进一步的解释。(https://www.postgresql.org/docs/9.1/typeconv.html

无论如何,我们可以对您的查询进行一些尝试并找出发生了什么:

SELECT '12' BETWEEN 1 and 2 

将导致 true forSELECT '12' BETWEEN '1' and '2'和 false for SELECT 12 BETWEEN 1 and 2。运行。它返回假。

这是进一步的测试:

SELECT 1 BETWEEN 'A' and '10'

这失败了ERROR: invalid input syntax for type integer: "A"

因此,PostgreSQL 尝试将字符串转换为数字,因为它认为您想在这里处理数字。


推荐阅读