SQL Server 2005 «между» оператором поведения - ошибка или функция? - PullRequest
6 голосов
/ 29 июля 2011

Согласно документации Microsoft , поведение оператора «МЕЖДУ» должно быть закрытым интервалом как с левой, так и с правой стороны, однако следующий код:

SELECT CASE WHEN (1 BETWEEN 1 AND 2) THEN 'YEAH' ELSE 'NO' END AS [closed in the left],
       CASE WHEN (1 BETWEEN 2 AND 1) THEN 'YEAH' ELSE 'NO' END AS [closed in the right]

показывает иначе. Вы можете воспроизвести это? Что ты думаешь?

Ответы [ 3 ]

15 голосов
/ 29 июля 2011

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

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

так что ваш второй CASE действительно тестирует:

1 >= 2 AND 1 <= 1
5 голосов
/ 29 июля 2011

Документация, на которую вы ссылаетесь, гласит:

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

так что результаты, которые вы получаете, верны. МЕЖДУ это просто стенография.

4 голосов
/ 29 июля 2011

Также должно быть указано где-то (я не прочитал это полностью), что значение слева должно быть меньше или равно значению справа. Вы не должны кодировать задом наперед только потому, что документация может явно не указывать вам этого. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...