2013-09-02 6 views
17

Ich habe eine sql table mit Datumsspalte namens CREATED_TS, die die Daten in anderem Format enthält, z. wie untenWie konvertiert man das Datum in ein Format `mm/dd/yyyy`

Feb 20 2012 12:00AM 
11/29/12 8:20:53 PM   
Feb 20 2012 12:00AM 
11/29/12 8:20:53 PM   
Feb 20 2012 12:00AM 
11/29/12 8:20:53 PM   
Nov 16 2011 12:00AM 
Feb 20 2012 12:00AM 
11/29/12 8:20:52 PM 

nun gezeigt mag ich dieses Format konvertieren mm\dd\yyyy vor, wie ich die Daten in WHERE Klausel meiner SELECT Abfrage bin im Vergleich.

Ich versuchte

CONVERT(VARCHAR(10),CREATED_TS,101) 

verwenden, aber das Ergebnis als bekam

Feb 20 201 
11/29/12 
Feb 20 201 
11/29/12 
Feb 20 201 
11/29/12 
Nov 16 201 
Feb 20 201 
11/29/12 

ich das Ergebnis wie zB benötigen. 02/20/2012 um zu vergleichen.

Jede Hilfe wird geschätzt.

+4

Ihr Problem ist, weil Sie Daten als varchars speichern! Es gibt keinen guten Grund, dies jemals zu tun. Speichern Sie Daten als Daten! [Bitte lesen Sie diesen Artikel] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx) – GarethD

+0

@GarethD Er sollte sie eigentlich als Datetime speichern –

Antwort

31

Wie Ihre Daten bereits in varchar, müssen Sie es in Datum konvertieren zuerst:

select convert(varchar(10), cast(ts as date), 101) from <your table> 
+7

Dies ist korrekt in Bezug auf die Konvertierung zuerst, aber "111" ist für "JJJJ/MM/TT", das OP hat bereits den richtigen Stil (101). – GarethD

+0

bekam die erforderliche Ausgabe mit Ihrem Vorschlag aber benötigt, um das Datum, das ich mit diesem Format als auch vergleichen wollte. – Rohaan

+0

konvertieren (varchar (10), , 111). Aber, ehrlich gesagt, es lohnt sich darüber nachzudenken, Ihre Daten als Daten zu speichern und zu vergleichen –

21

Verwenden CONVERT mit dem Value Spezifizierer von 101, während Ihre Daten date Gießen:

CONVERT(VARCHAR(10), CAST(Created_TS AS DATE), 101) 
+1

@DarrenDavies Gelernt von den mächtigen Dazefs;) – mattytommo

+0

111 ist für 'JJJJ/MM/TT', das OP hat den richtigen Style (101) das Problem ist, dass die Spalte schon ein Varchar ist und kein Datum, also wird der Stil nicht angewendet. – GarethD

+0

@GarethD Guten Ruf, aktualisiert. – mattytommo

5

Suchst du so etwas?

SELECT CASE WHEN LEFT(created_ts, 1) LIKE '[0-9]' 
      THEN CONVERT(VARCHAR(10), CONVERT(datetime, created_ts, 1), 101) 
      ELSE CONVERT(VARCHAR(10), CONVERT(datetime, created_ts, 109), 101) 
     END created_ts 
    FROM table1 

Ausgang:

 
| CREATED_TS | 
|------------| 
| 02/20/2012 | 
| 11/29/2012 | 
| 02/20/2012 | 
| 11/29/2012 | 
| 02/20/2012 | 
| 11/29/2012 | 
| 11/16/2011 | 
| 02/20/2012 | 
| 11/29/2012 | 

Hier ist SQLFiddle Demo

0

Verwendung:

select convert(nvarchar(10), CREATED_TS, 101) 

oder

select format(cast(CREATED_TS as date), 'MM/dd/yyyy') -- MySQL 3.23 and above 
Verwandte Themen