Postgres比较字符串和数字以返回正确的结果

时间:2019-11-19 07:50:36

标签: sql postgresql

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

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'

有人可以解释吗?

1 个答案:

答案 0 :(得分:4)

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

无论如何,我们可以处理您的查询并找出正在发生的情况:

SELECT '12' BETWEEN 1 and 2 

SELECT '12' BETWEEN '1' and '2'的结果为true,对SELECT 12 BETWEEN 1 and 2的结果为false。运行。它返回false。

这是进一步的测试:

SELECT 1 BETWEEN 'A' and '10'

此操作失败,显示为ERROR: invalid input syntax for type integer: "A"

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