2010-12-07 1 views
2

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

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

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

Q: так будет ли несколько форматов даты, например «dd-mm-yyyy» или «mm-dd-yyyy» в поле даты?

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

+2

** WHICH ** база данных система, какой версия/издание есть? Можете ли вы показать нам определение таблицы? – 2010-12-07 06:41:56

+3

Возможно, вы захотите также узнать нас в формате даты. Если дата yyyy-mm-dd вам не нужна конверсия. – 2010-12-07 06:46:59

+0

дата в формате varchar, так как я хочу, чтобы он принял дату в любом формате – Nikki 2010-12-07 06:49:25

ответ

3

Добавить еще один столбец и вставить формат значения даты. Используйте этот столбец в порядке п путем преобразования VARCHAR на сегодняшний день с помощью "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

выберите * с датыТаблица ORDERBy to_dateto_date (дата, 'yyyymmdd');

или выберите * from dateTable ORDERBy to_dateto_date (дата);

Синтаксис функции to_date является:

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

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

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

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

1

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

0

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

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


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

0

HI попробовать это прямо в запросе .. Его работает для моего приложения

заказ м.created_on desc LIMIT 0,5

3

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

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

select * 
    from dateTable 
order by date; 
1

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

Смежные вопросы