sql - 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'
有人可以解释一下吗?
解决方案
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 尝试将字符串转换为数字,因为它认为您想在这里处理数字。
推荐阅读
- sql-server - 在 SQL Server 2012 中将 varchar 转换为 float 时出错
- python - 终端中的matplotlib pyplot内联图
- python - python tkinter图像丢失
- java - 如何使用类似的字符串 HIBERNATE 数组
- python - 使用 python pandas 从原始 github 文件访问 CSV 数据
- python - Python 在达到调试点时退出,抛出“在已删除表上调用 Tcl_FindHashEntry”错误
- sql - 对(自定义)时间戳分区表的 BigQuery 查询返回零结果
- typescript - 如何测试一个 void async 函数是否成功与 jest?
- flutter - Flutter 升级错误:您对以下文件的本地更改将被覆盖
- python - 用 Python 中的链接抓取手机模型