Как отсортировать базу данных по полю даты? - PullRequest
2 голосов
/ 07 декабря 2010

У меня есть вопрос, что если у меня есть дата в виде строки в одном столбце таблицы на этой основе, я хочу отсортировать таблицу в базе данных. Как я могу выполнить эту операцию?

create table dateTable (
    _id INTEGER, 
    date varchar2(50), 
    name varchar2(50)
);

СУБД - Oracle, если это имеет значение.

В: так будет ли для даты несколько форматов, скажем «дд-мм-гггг» или «мм-дд-гггг» в поле даты?

A: Да, пользователь может печатать в любом формате.

Ответы [ 7 ]

3 голосов
/ 07 декабря 2010

Сохранение чисел в числовых типах данных, строк в символьных типах данных и дат в типах данных date. Если вы делаете это как-то иначе, то поступаете неправильно, и вы будете работать с базой данных, которая, в свою очередь, будет работать против вас. (что, я считаю, только что произошло).

Что касается вашего вопроса, вы просто заказываете по столбцу даты. Если строки выходят в «неправильном» порядке, прочитайте предыдущий абзац еще раз.

select *
  from dateTable 
 order by date;
3 голосов
/ 07 декабря 2010

Добавьте еще один столбец и вставьте формат значения даты. Используйте этот столбец в предложении order by, преобразовав varchar в date, используя "to_date (date_value, date_format)"

create table dateTable (date_id INTEGER, date_value varchar2(50),
date_name varchar2(50),date_format varchar2(50));

insert into dateTable values (1,'20101212121212','date1','YYYYMMDDHH24MISS');
insert into dateTable values (1,'20101212','date1','YYYYMMDD');
insert into dateTable values (1,'20101213','date3','YYYYMMDD');

select * from dateTable
order by to_date(date_value,date_format) desc
1 голос
/ 11 февраля 2011

Вы не можете сортировать базу данных, как хотите.У вас должен быть какой-то формат формата для сортировки, поскольку он не может сортироваться по всем форматам.

1 голос
/ 07 декабря 2010

Нельзя отсортировать дату в формате varchar, если вы разрешите «любой формат».Попробуйте добавить второй столбец с вычисленным значением с указанным форматом исправления.

1 голос
/ 07 декабря 2010

выбрать * из dateTable ORDERBy to_dateto_date (date, 'yyyymmdd');

или выбрать * из dateTable ORDERBy to_dateto_date (date);

Синтаксис функции to_date:

to_date( string1, [ format_mask ], [ nls_language ] )

string1 - строка, которая будет преобразована в дату.

format_mask не является обязательным.Это формат, который будет использоваться для преобразования строки1 в дату.

nls_language не является обязательным.Это язык nls, используемый для преобразования строки1 в дату.

0 голосов
/ 07 декабря 2010

HI, попробуйте это прямо в запросе. Это работает для моего приложения

заказ по m.created_on desc LIMIT 0,5

0 голосов
/ 07 декабря 2010

Ok! Если я использовал тип данных даты, то Также, если я хочу принять разные форматы даты, что я могу сделать в эта ситуация

Это будет сильно зависеть от языка, который вы используете для приложения. Обычно вы определяете формат даты из локали пользователей как часть вашей инфраструктуры интернационализации / локализации. Это означает, что используемый формат даты специально привязан к языку пользователя (т. Е. En_US, en_GB, de_DE и т. Д.). Если вы хотите принять любой формат от кого-либо без использования локали или пользовательского формата, то вам нужно написать алгоритм, чтобы попытаться угадать формат, и я не думаю, что будет какой-либо способ сделать этот алгоритм полным доказательством.


Это просто плохое дизайнерское решение не использовать единый формат даты в базе данных. Если вы хотите принять несколько форматов от пользователя, это нормально и хорошо, но вы должны обработать преобразование в формат БД на стороне приложения, прежде чем вставлять или использовать его для запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...