Порядок по дате, если имя не найдено порядок по времени

#sql #date

#sql #Дата

Вопрос:

Можно ли заказать по дате, и если дата не указана для заказа по времени, и если время больше даты, то оно будет первым в списке. Например, мы получили таблицу —

 id    date         time          name

1    18.10.2011    18.10.2011    number    
2    ---------     19.10.2011    number2    
3    ---------     18.10.2011    number3
  

И он должен упорядочить что-то вроде этого —

 1    number2
2    number
3    number3
  

Все данные сохраняются в базе данных в time() формате, поэтому, если время и дата совпадают, они будут смотреть на часы. Надеюсь, вы меня поняли.

Ответ №1:

Попробуйте:

 select id, date, time, name
from MyTable
order by greatest(time,coalesce(date,time))
  

(Некоторые из этих имен столбцов, вероятно, являются зарезервированными словами — я надеюсь, что это упрощенный пример!)

Ответ №2:

Вы можете попытаться использовать ORDER BY CASE . Это непроверено, но должно направить вас на правильный путь:

 ORDER BY CASE
  WHEN date IS NOT NULL AND time < date THEN date
  WHEN time > date OR date IS NULL THEN time
  ELSE time
END
  

На самом деле, ELSE time вероятно, здесь нет необходимости. Первые два случая должны охватывать это.

Комментарии:

1. Хм, возможно ли сделать что-то подобное — я получил время в этом формате — time() (90 * 24 * 60 * 60) вставлен в базу данных, поэтому мне нужно будет отобразить его как time() — (90 * 24 * 60 * 60) чтобы получить дату вставки (причина время отображает дату, когда строка будет удалена). Y2OK

2. К каким типам данных относятся ваши столбцы? Являются ли они фактическими DATETIME и TIME типами или целыми числами, представляющими временные метки UNIX?

3. Привет, таблицы — это просто varchar.

4. @Y2ok: Как представляются времена, если они хранятся как переменные? (и кто подумал, что было бы неплохо хранить поля даты и времени как переменные?)

5. хм, они представлены как date();