Postgresql не возвращает значения по определенным числовым критериям - PullRequest
2 голосов
/ 17 августа 2011

У меня есть база данных 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 не возвращает строк.

Я не могу понять, почему. У тебя такая же проблема? Как я могу это исправить?

1 Ответ

3 голосов
/ 17 августа 2011

Я вижу одно решение - использовать явное приведение к 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

Согласно документации :

Числовая константа, котораяне содержит ни десятичной точки, ни показатель степени изначально считается типом integer, если его значение соответствует типу integer (32 бита);в противном случае предполагается, что это тип bigint, если его значение соответствует типу bigint (64 бита);в противном случае он считается типом numeric.Константы с десятичными точками и / или показателями всегда изначально имеют тип числовой .

Обратите внимание:

SELECT 1.33::numeric = 1.33::real;
 ?column? 
----------
 f
(1 row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...