试图了解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'
有人可以解释吗?
答案 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尝试将字符串转换为数字,因为它认为您想在此处处理数字。