SQL Сервер:Как сделать заказ по дате, если дата < GetDate() Получить дату()

StackOverflow https://stackoverflow.com/questions/1817933

Вопрос

Вот один интересный пример...надеюсь, я смогу это хорошо объяснить...

У меня есть коллекция соревнований в одной таблице в моей базе данных 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 наизусть, посмотрите ее!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top