SQL Сервер:Как сделать заказ по дате, если дата < GetDate() Получить дату()
-
10-07-2019 - |
Вопрос
Вот один интересный пример...надеюсь, я смогу это хорошо объяснить...
У меня есть коллекция соревнований в одной таблице в моей базе данных SQL Server.Я выполняю полнотекстовый поиск по ним, который работает нормально.Однако некоторые соревнования являются закрытыми, и я хочу, чтобы эти закрытые соревнования появлялись после открытых соревнований, сохраняя при этом рейтинг, который мы получаем от полнотекстового поиска.
Так что, если бы у меня был бит isOpen feild, я бы их заказал по
ORDER BY IsOpen DESC, KEY_TBL.Rank DESC
Теперь проблема в том, что у меня нет битового поля isOpen.Вместо этого у меня есть поле ClosedDate, которое является датой-временем.
Итак, что мне действительно нужно сделать, это что-то вроде:
ORDER BY (ClosingDate < GetDate()) ASC, KEY_TBL.Rank DESC
Кто-нибудь знает, как это сделать?
Любые идеи были бы великолепны!Заранее благодарю.
-Эв
Решение
ORDER BY
CASE
WHEN (ClosingDate < GetDate())
THEN 1
ELSE 0
END ASC,
KEY_TBL.Rank DESC
Другие советы
добавить (дата закрытия < GetDate()) к выбранным полям и упорядочить по этому полю
select ... , add (ClosingDate < GetDate()) as Foo
from ...
where ...
order by foo
возможно, добавить (ClosingDate < GetDate()) не будет принят, тогда вам придется использовать ЕСЛИ(добавить (дата закрытия < GetDate());1;0)
Я не знаю синтаксис этой функции IF наизусть, посмотрите ее!