2014-10-05 16 views
1

Что такое идиоматический способ достижения ниже без воспроизведения выражения, дающего нецелое значение (в моем действительном случае значения вычисляются как процент после длительного запроса, который я не хочу, чтобы воспроизвести):проверяет, находится ли нецелое число в диапазоне [a, b) - или [a, b], (a, b), (a, b]

SELECT * FROM SomeTable WHERE 1/100.0 >0 AND 1/100.0<=0.5 

Я заинтересован в обобщенном шаблоне, который может вместить все тип границы: [], [), (] и()

+1

Ваш код действительно Безразлично» Имеют смысл. Я предполагаю, что вы хотите это выражение в предложении 'where', а не в предложении' select'. –

+0

@ GordonLinoff вы правы; Я обновил вопрос –

ответ

1

Если вы не хотите, чтобы переписать выражение, а затем использовать подзапрос:.

select t.* 
from (select 1/100.0 as x 
     . . . 
    ) t 
where x > 0 and x <= 0.5 

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

where 1/100.0 between 0 and 0.5 
0

Вы можете построить the range и проверить, содержит ли ваше значение:

SELECT * FROM SomeTable WHERE numrange(0,0.5,'(]') @> 1/100.0; 
+0

, похоже, что это невозможно в PostgreSQL 9.1 –

+0

Извините, что, не глядя на ваши теги, они появились в 9.2. – vyegorov

Смежные вопросы