2009-10-09 10 views
32

Können Sie mir bitte bei der Lösung dieses Problems helfen. Ich versuche, die Ergebnisse einer SQL-Abfrage nach Datum zu sortieren, aber ich bekomme nicht die Ergebnisse, die ich brauche.SQL ORDER BY Datum Problem

Die Abfrage 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 
sollte

Ergebnisse sein:

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

Ich muss das Datum im Format bis zur Auswahl .

Ihre Hilfe wird sehr geschätzt.

+5

Es ist wichtig, wenn Sie Beiträge verfassen Fragen zu Spezifizieren Sie, wie welche Datenbank Sie verwenden und welchen Datentyp die Spalte DATUM in Ihrer Tabelle hat. Es erleichtert es den Menschen, Ihnen zu helfen. sie müssen nicht raten. –

+5

Während ich weiß, dass es nicht wirklich wichtig für Ihre Antwort ist, würde ich gerne einen guten Grund hören, warum diese Spalte kein Datetime ist ... – Achilles

+2

ORDER BY ID (der Autoinkrementwert) – tetris

Antwort

14

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

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

Wie najmeddine zeigt, können Sie die Spalte bei jedem Zugriff konvertieren, aber ich würde sehr versuchen, das nicht zu tun. Es macht die Datenbank eine Menge mehr Arbeit - es wird nicht in der Lage sein, geeignete Indizes usw. zu halten. Wenn immer möglich, speichern Sie die Daten in einem für die Daten geeigneten Typ.

+0

oder JJJJ-MM-TT noch besser – dusoft

+2

@dusoft: Es spielt keine Rolle, welchen Separator Sie verwenden, solange er in der richtigen Reihenfolge steht. –

+0

@Jon: Es ist einfacher, zwei Bindestriche als zwei Schrägstriche zu vergleichen, weil Sie nicht mit dem Winkel umgehen müssen. :-D – Zed

37

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

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

style 103 = dd/MM/yyyy (msdn)

+2

Dies wird nicht korrekt sortiert, wenn die aktuellen Einstellungen für Sprache und Datumsformat die Interpretation von aa/bb/cccc als Monat/Tag/Jahr verursachen, wie dies bei den meisten US-Installationen von SQL Server der Fall ist. (Ich gehe von der Verwendung von CONVERT aus, dass dies T-SQL ist, so dass Sie den 103 als optionalen dritten Parameter für CONVERT angeben und jede Sprache oder jeden Dateformat-Kontext überschreiben können.) –

+0

danke für die Info. – manji

+0

Ich würde gerne wissen, wie jemand herausfinden konnte, dass diese Daten nicht von "datetime" sondern "varchar" von den bereitgestellten Informationen waren. Warum sollte es weniger Ergebnisse geben als ursprünglich gezeigt, nur durch Ändern des Feldtyps? Sollte es nicht eine WHERE-Klausel geben, um die Antworten zu reduzieren, wenn es alle Ergebnisse gibt, wenn es nur einige geben sollte? – vapcguy

3

folgende Antwort hilft Ihnen

kann

von Ihrem Datumsidentifikator Ihr Datum Bestellung durchführen, sondern verwenden to_char() Funktion in select-Klausel und verwenden Sie eine andere Kennung in Select-Klausel für das Datum

z

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; 
+0

to_char und können andere to_date (erstellt_at, 'TT/MM/JJJJ hh24: mi: ss') als DISPDATE .. danke Brushan! Funktioniert gut. – KingRider

10

Unsicher, was dbms Sie verwenden jedoch würde ich es auf diese Weise in Microsoft SQL tun:

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

Das hat bei mir funktioniert, danke – Tyler

1

Diese Sie in mysql helfen kann, 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

versuchen, dieses

Order by Convert(datetime,@date) desc 
3

SELECT CONVERT (char (19), CAST (Datum des Datumzeit), 101) als [Datum]
FROM tbemp ORDER BY convert (Datumzeit, Datum, ASC 101)

1

wollte ich mehrere Veranstaltungen in Nachkommen chonologic, um bearbeiten, und ich habe gerade ein:

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

und es funktioniert für mich. Aber sicherlich nicht für jeden Fall angepasst ... Ich hoffe nur, es wird jemandem helfen!

5

das funktioniert für mich:

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

2

Versuchen für mich, diese, diese Arbeit mit

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

wo start_date das Namensfeld