Frage SQL ORDER BY Datum Problem


Können Sie mir bitte helfen, dieses Problem zu lösen? Ich versuche, die Ergebnisse einer SQL-Abfrage nach Datum zu sortieren, aber ich bekomme nicht die Ergebnisse, die ich brauche.

Die Abfrage, die ich verwende, ist:

SELECT date FROM tbemp ORDER BY date ASC

Ergebnisse sind:

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

Die Ergebnisse sollten sein:

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

Ich muss das Datum im obigen Format auswählen.

Deine Hilfe ist sehr Willkommen.


34
2017-10-09 20:27


Ursprung


Antworten:


Es scheint, dass Ihre Datumsspalte nicht vom Typ datetime, sondern varchar ist. Sie müssen es beim Sortieren in datetime konvertieren:

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

style 103 = dd/MM/yyyy (msdn)


37
2017-10-09 20:31



Es klingt für mich so, als wäre Ihre Spalte keine Datumsspalte, sondern eine Textspalte (varchar / nvarchar usw.). Sie sollten es in der Datenbank als Datum und nicht als Zeichenfolge speichern.

Wenn du haben um es als String aus irgendeinem Grund zu speichern, speichern Sie es in einem sortierbaren Format, z. JJJJ / MM / TT.

Wie najmeddine zeigt, du könnte konvertiere die Spalte bei jedem Zugriff, aber ich würde mich sehr bemühen, das nicht zu tun. Dadurch wird die Datenbank a Menge mehr Arbeit - es wird nicht in der Lage sein, geeignete Indizes usw. zu behalten. Wenn möglich, speichern Sie die Daten in einem für die Daten geeigneten Typ.


15
2017-10-09 20:29



Ich weiß nicht, welche dbms Sie verwenden, aber ich würde es so in Microsoft SQL machen:

select      [date]
from        tbemp 
order by    cast([date] as datetime) asc

10
2018-01-10 23:33



das funktioniert für mich:

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


6
2017-08-05 14:30



Folgende Antwort kann Ihnen helfen

Führen Sie die Datumsreihenfolge nach Ihrer Datums-ID aus, verwenden Sie jedoch die Funktion to_char () in der SELECT-Klausel und verwenden Sie eine andere ID in SELECT-Klausel für das Datum

z.B.

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;

3
2017-11-15 07:39



SELECT CONVERT (char (19), CAST (Datum AS datetime), 101) als [Datum]
Von tbemp ORDER BY konvertieren (Datum Uhrzeit, Datum, 101) ASC


3
2017-12-23 20:07



Verwenden Sie diese Arbeit für mich

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

woher Anfangsdatum ist der Feldname


2
2018-04-26 06:40



Dies kann Ihnen helfen, in 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;

1
2018-02-23 10:26