Число между а и б - не включительно по а, включительно по б

(Я немного новичок в SQL). У меня есть много запросов, которые я переписываю, в которых есть предложение where, подобное этому:

where some_number > A
and some_number <= B

Я хочу использовать одно предложение where (меньше строк, это не быстрее/медленнее, не так ли?), например:

where some_number between A and B

Проблема в том, что первое предложение является эксклюзивным для A и включительно для B. Можно ли каким-либо образом указать «инклюзивность» в одной строке, как во втором запросе? Спасибо.


person kentcdodds    schedule 29.05.2012    source источник
comment
Первый пример - правильный синтаксис. between включительно.   -  person Jeremy Holovacs    schedule 29.05.2012
comment
Если вы имеете дело с целыми числами, просто сместите один из ваших пределов на единицу. Но почему вы пытаетесь это сделать? Вы создаете код, который менее удобен в сопровождении и не быстрее. Что не так с двухстрочным подходом?   -  person David M    schedule 29.05.2012
comment
@DavidM - У каждого свой собственный курс, но я предпочитаю синтаксис BETWEEN, а не .. > A AND ... <= B.   -  person Lieven Keersmaekers    schedule 29.05.2012
comment
Вы делаете это так, как вы уже это делаете. Не поддавайтесь искушению BETWEEN (A+smallAmount) AND (B), если вы не работаете с дискретными значениями, такими как INTEGER. Если вы работаете с непрерывными значениями, такими как FLOAT или DATE, придерживайтесь того, что вы делаете.   -  person MatBailie    schedule 29.05.2012
comment
@Lieven - Но я предпочитаю правильное математическое поведение. Если поле является непрерывным значением, BETWEEN неверно.   -  person MatBailie    schedule 29.05.2012
comment
@Lieven - даже если у вас отключена магия на единицу или на очень небольшую величину, чтобы МЕЖДУ прыгать через обручи, это не предназначалось? Вот что я имел в виду под менее ремонтопригодным. Я предпочитаю МЕЖДУ, если это правильный инструмент для работы, но здесь это не так.   -  person David M    schedule 29.05.2012
comment
@все ;) Спасибо за советы. Я приму ответ (через 5 минут), который отражает чувства, которые разделяют большинство из вас.   -  person kentcdodds    schedule 29.05.2012
comment
@Dems - Правильно, конечно. Перефразирую: при использовании дискретных значений я предпочитаю синтаксис BETWEEN, а не .. > A AND ...<= B.   -  person Lieven Keersmaekers    schedule 29.05.2012


Ответы (2)


Пара моментов...

Во-первых, это только «меньше строк», если вы используете меньше строк. Я бы отформатировал так:

where some_number > A and some_number <= B

потому что на самом деле это одно условие диапазона, где каждый конец диапазона закодирован отдельно.


Во-вторых, на самом деле это не быстрее и не медленнее, чем между версиями, потому что под прикрытием between A and B преобразуется в:

where (some_number >= A) and (some_number <= B)

так что производительность одинаковая.

В принципе, не беспокойтесь об этом.

person Bohemian♦    schedule 29.05.2012

Вы можете просто компенсировать свой a на "+1"

Или просто используйте свой первый синтаксис, его легче читать.

person Sagi    schedule 29.05.2012
comment
+1 предполагает целое число. Как насчет FLOAT, DATETIME и т. д.? Механизм смещения только хорошо работает для дискретных значений и крайне плохо для непрерывных значений. - person MatBailie; 29.05.2012