SQL BETWEEN Условное значение оператора в обратном порядке

Почему следующий SQL-запрос показывает результаты?

SELECT * FROM Products WHERE Price BETWEEN 10 AND 20; 

но когда мы изменим порядок стоимости, он не покажет никакого результата?

  SELECT * FROM Products WHERE Price BETWEEN 20 AND 10; 

  SELECT * FROM Products WHERE Price BETWEEN 20 AND 10; 

переводит на

  SELECT * FROM Products WHERE Price >= 20 AND Price <= 10; 

BETWEEN возвращает TRUE, если значение test_expression больше или равно значению begin_expression и меньше или равно значению end_expression. NOT BETWEEN возвращает TRUE, если значение test_expression меньше значения begin_expression или больше значения end_expression.

В вашем случае ваше утверждение оценивается greater than or equal to 20 AND less than or equal to 10

Потому что порядок имеет значение. Подумать об этом:

 x BETWEEN a AND b 

эквивалентно

 a <= x AND x <= b 

Если a > b , это никогда не может быть правдой.

Другими словами, для того, чтобы BETWEEN было полезно, вы должны убедиться, что a <= b .

Справочная страница MSDN для оператора BETWEEN T-SQL гласит:

 test_expression [ NOT ] BETWEEN begin_expression AND end_expression 

[…] BETWEEN возвращает TRUE если значение test_expression больше или равно значению begin_expression и меньше или равно значению end_expression .

Итак, что вы наблюдаете, следует из этого определения: поскольку Price может быть одновременно ≥ 20 и ≤ 10, условие никогда не выполняется, и поэтому все записи отфильтровываются. (С другой стороны, Price может быть как ≥ 10, так и ≤ 20, поэтому в этом случае могут быть результаты в зависимости от ваших данных.)

Interesting Posts

Тайм-аут SQL истек, когда он не должен

Формат столбца таблицы таблиц SQL

Разделить на ноль исключение из числа столбцов в строке SQL Server

Использование переменной SQL в аналогичном выражении

Как я могу отобразить зеленую ячейку, если результат верен или изображение зеленого робота, когда результат верен в службах отчетов SQL Server

Игнорируемые символы в Where-Clause?

Как отформатировать вывод TSQL SELECT в SQL Sever

Как написать триггер для удаленного элемента?

SSRS: поле отображается корректно в запросе, но неверно в представлении отчета

Получение порядкового номера, используемого в качестве значения по умолчанию для вставки в SQL Server

Общая сумма с максимальным лимитом

SQL-функции для включения встроенных

СУММА ВНЕШНЕГО ВЗАИМОДЕЙСТВИЯ ГРУППОВОЙ ГРУППЫ, КОГДА, СОДЕРЖАЩАЯ АГРЕГАТИЧЕСКОЕ значение, вместо сингулярного ожидаемого экземпляра

Как изменить столбец от null до не null, когда индекс зависит от этого столбца, не воссоздавая индекс?

Запрос T-SQL SELECT для возврата комбинированного результата из нескольких таблиц

Давайте будем гением компьютера.