Как использовать оператор между в SQL Server? - PullRequest
0 голосов
/ 02 мая 2018

В моем запросе к SQL Server у меня есть

to < GETDATE() or GETDATE() < from

Можно ли упростить это с помощью оператора BETWEEN?

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Просто чтобы проиллюстрировать мой комментарий, вот как вы можете переписать свой текущий фильтр, используя BETWEEN.

Я не собираюсь предполагать, что существуют какие-либо правила относительно значений в [from] и [to], которые могут быть меньше других или равны. Если бы были такие правила, возможно, это можно было бы упростить.

И на самом деле, обдумывая это достаточно, чтобы записать это, я вижу, что логика не так сложна, как я первоначально думал. Однако я бы не назвал это «упрощением» того, что у вас уже есть.

WHERE 
 ([from] <= [to] AND GETDATE() NOT BETWEEN [from] AND [to]) --in this case it's a simple NOT BETWEEN
 OR 
 ([from] > [to])  --if [from] is greater than [to] then actually every possible value of getdate must be either greater than [to] or less than [from]
0 голосов
/ 03 мая 2018

Конечно, это может быть упрощено до

where GETDATE() BEWTWEEN to AND from
0 голосов
/ 02 мая 2018

Да, но (1) нет никакой выгоды от плана запроса, и (2) это также зависит от ваших требований. Более подробную информацию, чем вы, вероятно, хотели бы прочитать, читайте в статье моего приятеля Остерегайтесь Between .

Например, из статьи. Если я езжу на своей машине между двумя деревьями, я не хочу включать деревья (иначе у меня есть повреждение дерева и / или повреждение автомобиля). Но если я поймаю самолет между Нью-Йорком и Лондоном, оба города будут включены (чтобы поймать самолет и посадить самолет). Таким образом, «машина между деревьями» отличается от «струи между городами»; в SQL «между» используется в «инклюзивном» смысле «струя между городами».

Кроме того, если немного коснуться, вам действительно нужен компонент времени в вашем утверждении? Если не CAST (GETDATE () в качестве даты) вернет только часть даты.

...