SQL ORDER BY дата проблема - PullRequest
       37

SQL ORDER BY дата проблема

39 голосов
/ 10 октября 2009

Можете ли вы помочь мне в решении этой проблемы. Я пытаюсь упорядочить результаты SQL-запроса по дате, но я не получаю нужные мне результаты.

Я использую запрос:

SELECT date FROM tbemp ORDER BY date ASC

Результаты:

01/02/2009
03/01/2009
04/06/2009
05/03/2009
06/12/2008
07/02/2009

Результаты должны быть:

06/12/2008
03/01/2009
01/02/2009
07/02/2009

Мне нужно выбрать дату в формате выше.

Ваша помощь очень ценится.

Ответы [ 10 ]

39 голосов
/ 10 октября 2009

Кажется, ваш столбец даты не типа datetime, а varchar. Вы должны преобразовать его в дату и время при сортировке:

select date
from tbemp
order by convert(datetime, date, 103) ASC

style 103 = dd/MM/yyyy (msdn)

15 голосов
/ 10 октября 2009

Мне кажется, что ваш столбец не столбец даты, а текстовый столбец (varchar / nvarchar и т. Д.). Вы должны хранить его в базе данных как дату, а не как строку.

Если у вас есть для сохранения его в виде строки по какой-либо причине, сохраните его в сортируемом формате, например. гггг / дд / мм.

Как показывает Найджмеддин, вы могли бы конвертировать столбец при каждом доступе, но я бы очень старался этого не делать. Это заставит базу данных выполнять lot больше работы - она ​​не сможет хранить соответствующие индексы и т. Д. По возможности сохраняйте данные в типе, соответствующем самим данным.

11 голосов
/ 11 января 2012

Не знаю, какие базы данных вы используете, однако я бы сделал это так в Microsoft SQL:

select      [date]
from        tbemp 
order by    cast([date] as datetime) asc
6 голосов
/ 05 августа 2014

это работает для меня:

SELECT datefield FROM myTable ORDER BY CONVERT(DATE, datefield) ASC

3 голосов
/ 24 декабря 2013

ВЫБРАТЬ КОНВЕРТ (char (19), CAST (date AS datetime), 101) как [date]
ОТ ТЭМП ЗАКАЗАТЬ ПО конвертировать (дата, время, 101) ASC

3 голосов
/ 15 ноября 2011

Следующий ответ может помочь вам

выполните упорядочение даты по идентификатору даты, но используйте функцию to_char () в предложении select и используйте какой-то другой идентификатор в предложении select для даты

, например

SELECT TO_CHAR(DISPDATE1,'DD/MM/YYYY') AS DISPDATE,
SUM(APPLCOUNT) AS APPLIED,
SUM(CONFCOUNT) AS CONFIRMED
FROM
    (
        SELECT COUNT(ID) AS APPLCOUNT,
                   0 AS CONFCOUNT,
                   STUDENT.APPLIED_ON AS DISPDATE1
            FROM STUDENT
            WHERE STUDENT.ID = P_ID
            GROUP BY STUDENT.APPLIED_ON
        UNION
            SELECT 0 AS APPLCOUNT,
                   COUNT(ID) AS CONFCOUNT,
                   STUDENT.CONFIRMED_ON AS DISPDATE1
            FROM STUDENT
            WHERE STUDENT.ID = P_ID
            GROUP BY STUDENT.CONFIRMED_ON
    )
GROUP BY DISPDATE1
ORDER BY DISPDATE1;
2 голосов
/ 26 апреля 2016

Попробуйте использовать эту работу для меня

select *  from `table_name` ORDER BY STR_TO_DATE(start_date,"%d-%m-%Y") ASC

где start_date - имя поля

1 голос
/ 23 апреля 2014

Я хотел отредактировать несколько событий в хронологическом порядке по потомкам, и я просто сделал:

select 
TO_CHAR(startdate,'YYYYMMDD') dateorder,
TO_CHAR(startdate,'DD/MM/YYYY') startdate,
...
from ...
...
order by dateorder desc

и у меня это работает. Но, конечно, не адаптированы для каждого случая ... Надеюсь, это кому-нибудь поможет!

1 голос
/ 21 августа 2013

попробуйте

Order by Convert(datetime,@date) desc
1 голос
/ 23 февраля 2012

Это может помочь вам в MySQL, php.

//your date in any format
$date = $this->input->post('txtCouponExpiry');

$day = (int)substr($date, 3, 2);
$month = (int)substr($date, 0, 2);
$year = (int)substr($date, 7, 4);

$unixTimestamp = mktime(0, 0, 0, $year, $day, $month);

// insert it into database
'date'->$unixTimestamp;

//query for selecting  order by date ASC or DESC
select * from table order_by date asc;
...