我有一个postgresql数据库,如下所示:
+---------------+---------------- ------+------------ ---+
| id (bigint) | name (varying(255)) | price (real) |
+---------------+---------------- ------+------------ ---+
| 1 | name 1 | 0.33 |
+---------------+---------------- ------+------------ ---+
| 1 | name 2 | 1.33 |
+---------------+---------------- ------+------------ ---+
| 1 | name 3 | 1 |
+---------------+---------------- ------+------------ ---+
然后是我的查询结果:
SELECT * FROM my_table WHERE price = 1 -- OK (one row returned)
SELECT * FROM my_table WHERE price = 1.0 -- OK (one row returned)
SELECT * FROM my_table WHERE price = 1.33 -- FAIL (no row returned)
SELECT * FROM my_table WHERE price = 0.33 -- FAIL (no row returned)
当该值不能转换为非浮点值时,postgresql不会返回任何行。
我不明白为什么。你也有同样的问题吗?我该怎么解决?
最佳答案
我看到的一个解决方案是使用显式强制转换来real
数据类型:
SELECT * FROM my_table WHERE price = 0.33::real;
id | name | price
----+--------+-------
1 | name 1 | 0.33
SELECT * FROM my_table WHERE price = 1.33::real;
id | name | price
----+--------+-------
1 | name 2 | 1.33
根据documentation:
既不包含小数点也不包含
如果指数的值与
整数类型(32位);否则,如果
它的值符合bigint类型(64位);否则将被视为
键入数字。包含小数点和/或指数的常数
最初总是假定为数字类型。
注意:
SELECT 1.33::numeric = 1.33::real;
?column?
----------
f
(1 row)
关于sql - postgresql不返回特定数字条件下的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7095638/