2012-04-05 9 views
4

Ich habe immer SQL Server-Datumsformatierung als kontra intuitiv gefunden . Ich bin mir ziemlich sicher, dass ich bereits weiß, dass die einzige Antwort darin besteht, eine Menge Konvertierungs- und String-Funktionen zu verwenden, aber ich dachte, ich würde nur für den Fall fragen.Mit SQL Server-Format Datum wie '% Y-% m-% d% I:% M% P'/'2012-04-05 11:56'

Wie erhalten Sie SQL Server zu formatieren ein datetime aussehen:

%Y-%m-%d %I:%M%P or '2012-04-05 11:56am' 

Mein aktueller Ansatz beinhaltet Daten mit SELECT CONVERT(VARCHAR(19), GETDATE(), 120) zurückziehen und dann Looping-Server/Client-Seite im Code. Dies finde ich in einigen Szenarien ineffizient, wenn Daten nach CSV exportiert werden.

+6

Statt Zurückgeben eines VARCHAR Upgrade (19) 'warum nicht ein' date' zurückgeben und lassen Sie den Client-Code formatieren –

+2

Ich könnte leicht einen UNIX-Zeitstempel zurückgeben und meine Formatierung im Code tun. Meine Frage bezieht sich speziell darauf, wie ich die Datenbank für die Formatierung nutzen kann. Dies ist in einigen Szenarien vorzuziehen, z. B. bei einem großen CSV-Speicherauszug oder bei Schnittstellen zu anderen Anwendungen, bei denen ich allein die Kontrolle über das Format verwende. – ficuscr

Antwort

1

Ich denke, die wirkliche Antwort ist: "Du nicht", es sei denn, Sie SQL Server-Instanzen auf SQL Server 2012.

FORMAT (Transact-SQL)

2
select 
    cast(datepart(YYYY, GETDATE()) as varchar) + '-' + 
    right('0' + cast(datepart(MM, GETDATE()) as varchar), 2) + '-' + 
    right('0' + cast(datepart(DD, GETDATE()) as varchar), 2) + ' ' + 
    LTRIM(RIGHT(cast(GETDATE() AS varchar), 8)) 
+0

Ahh, jetzt fühle ich mich schlecht und weiß nicht, wem ich die Punkte geben soll. Ich sollte SO nicht benutzen, um gegen MSSQL zu schimpfen ... – ficuscr

+1

Es ist mir egal, wer die Punkte bekommt, nur die, die Ihnen geholfen haben. – Kevin

+0

@ficuscr: Ja, ich dachte, das war einer der Ansätze, die du mit "einer Menge Konvertierungs- und Stringfunktionen" meintest. Wenn diese oder eine andere Antwort die bessere Antwort ist, akzeptiere diese definitiv (statt meiner!). –

2
DECLARE @d AS datetime; 
SET @d = '2012-04-04 16:43:00' 
SELECT LEFT(CONVERT(VARCHAR, @d, 120), 11) 
     + RIGHT('0' + LTRIM(SUBSTRING(CONVERT(VARCHAR, @d, 131), 12, 5)), 5) 
     + LOWER(RIGHT(CONVERT(VARCHAR, @d, 131), 2)) 
--2012-04-04 04:43pm 
Verwandte Themen