#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();