Как выбрать конкретную строку на основе двух значений в PostgreSQL - PullRequest
0 голосов
/ 20 декабря 2018

У меня действительно странная проблема.Я знаю, что в первой строке моей таблицы есть два столбца со следующими значениями: lat = 35.6635 lng = 139.395

Тип данных REAL (я проверил его).

Я пытаюсьвыберите эти значения с помощью следующего запроса:

select lat, lng from mytable where lat = 35.6635 and lng = 139.395

Вывод - ничто, т.е. я не могу найти значения в своей таблице.

Есть идеи, в чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете попробовать что-то вроде:

select lat, lng from mytable where lat > 35.6634 and lng > 139.394 and lat < 35.6636 and lng < 139.396

В компьютерном мире вы никогда не должны сравнивать эквивалентные числа с плавающей запятой

0 голосов
/ 20 декабря 2018

Тип REAL в Postgres является неточным, это означает, что точные значения, которые вы использовали в своем запросе, могут фактически не сохраняться как есть.Вы должны использовать NUMERIC или DECIMAL, если вам требуется точное хранилище.См. Документацию Postgres для получения дополнительной информации о точных и неточных числовых типах.

В качестве обходного пути для поиска вашей записи вы можете попробовать:

select lat, lng
from mytable
where round(lat, 1) = 35.7 and round(lng, 1) = 139.4;

Если указано вышезапрос возвращает более одной записи, надеюсь, вам будет понятно, какую именно запись вы хотите найти.

...