我有一个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/

10-14 15:18
查看更多