Ответ 1
Кажется, что ваш столбец даты не типа datetime, а varchar. Вы должны преобразовать его в datetime при сортировке:
select date
from tbemp
order by convert(datetime, date, 103) ASC
style 103 = dd/MM/yyyy (
msdn
)
Не могли бы вы помочь мне в решении этой проблемы. Я пытаюсь заказать результаты 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
Мне нужно выбрать дату в формате выше.
Ваша помощь очень ценится.
Кажется, что ваш столбец даты не типа datetime, а varchar. Вы должны преобразовать его в datetime при сортировке:
select date
from tbemp
order by convert(datetime, date, 103) ASC
style 103 = dd/MM/yyyy (
msdn
)
Мне кажется, что ваш столбец не является столбцом даты, а текстовым столбцом (varchar/nvarchar и т.д.). Вы должны сохранить его в базе данных как дату, а не строку.
Если вам по какой-то причине нужно сохранить его как строку, сохраните его в отсортированном формате, например. дд гггг/ММ/.
Как показывает najmeddine, вы можете преобразовать столбец при каждом доступе, но я бы очень старался этого не делать. Это сделает базу данных намного более эффективной - она не сможет поддерживать соответствующие индексы и т.д. По возможности хранить данные в типе, соответствующем самим данным.
Не знаете, какие dbms вы используете, но я бы сделал это так в Microsoft SQL:
select [date]
from tbemp
order by cast([date] as datetime) asc
это работает для меня:
SELECT datefield
FROM myTable
ORDER BY CONVERT(DATE, datefield) ASC
Следующий ответ может помочь вам
выполните упорядочение даты по вашему идентификатору даты, но используйте функцию 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;
SELECT CONVERT (char (19), CAST (дата AS datetime), 101) как [дата]
FROM tbemp
ORDER BY convert (дата, дата, 101) ASC
Попробуйте использовать эту работу для меня
select * from `table_name` ORDER BY STR_TO_DATE(start_date,"%d-%m-%Y") ASC
где start_date - это имя поля
Это может помочь вам в 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;
попробуйте это
Order by Convert(datetime,@date) desc
Я хотел отредактировать несколько событий в потоковом хонологическом порядке, и я просто сделал:
select
TO_CHAR(startdate,'YYYYMMDD') dateorder,
TO_CHAR(startdate,'DD/MM/YYYY') startdate,
...
from ...
...
order by dateorder desc
и он работает для меня. Но, конечно, не адаптированный для каждого случая... Просто надеюсь, что это поможет кому-то!