2016-06-21 12 views
3

Ich habe eine Datumformatierungsvoraussetzung, die anfänglich einfach aussah, aber sich als ein Schmerz erweist. Ich benutze SQL Server 2012, aber muss 2008 unterstützen.SQL Server-spezifisches Datumsformat TT MM YYYY

Blick auf Referenz (https://msdn.microsoft.com/en-GB/library/ms187928.aspx) Ich kann CONVERT verwenden, um eine Datetime als String in vielen verschiedenen Formaten zu formatieren, aber ich kann nicht scheinen zu bekommen DD MM YYYY ohne Umgehungslösungen. Gibt es einen Code, der nicht in der Referenz enthalten ist, die ich irgendwo vermisse?

Workarounds, die ich sehen kann, sind wie folgt, aber ich bin offensichtlich nicht scharf darauf, diese zu verwenden, wenn es eine vernünftige Möglichkeit gibt, es mit T-SQL zu tun.

SELECT REPLACE(CONVERT(varchar, GETDATE(), 103), '/',' ') 
SELECT RIGHT('0' + CONVERT(varchar, DATEPART(dd, GETDATE())), 2) + ' ' + RIGHT('0' + CONVERT(varchar, DATEPART(mm, GETDATE())), 2) + ' ' + CONVERT(varchar, DATEPART(yyyy, GETDATE())) 

Nach Kommentaren, wäre ein Beispiel Eingabedatum 21. Juni 2016 sein (Jahr = 2016 Monat = 06, Tag = 21), für die die gewünschte Ausgabe 21 würde 06 2016.

+0

Bitte zeigen Sie uns Beispiele Ihrer Daten und welche Ausgabe Sie benötigen. – gofr1

+1

was ist los mit dem ersten? –

+0

@gofr, nicht sicher, ob es etwas hinzufügt, aber ich habe ein bestimmtes Datum Beispiel enthalten. –

Antwort

2

I‘ D geh mit deinem ersten Vorschlag, scheint am passendsten;

Einige Testdaten machen;

IF OBJECT_ID('tempdb..#Dates') IS NOT NULL DROP TABLE #Dates 
GO 
CREATE TABLE #Dates (OriginalDate datetime) 
INSERT INTO #Dates (OriginalDate) 
VALUES 
('2016-01-01') 
,('2016-05-06') 
,('2016-08-09') 
,('2016-12-25') 

Abfrage;

SELECT 
OriginalDate 
,REPLACE(CONVERT(varchar,OriginalDate,103),'/',' ') NewDate 
FROM #Dates 

Ergebnis;

OriginalDate    NewDate 
2016-01-01 00:00:00.000  01 01 2016 
2016-05-06 00:00:00.000  06 05 2016 
2016-08-09 00:00:00.000  09 08 2016 
2016-12-25 00:00:00.000  25 12 2016 
+0

Danke für die Eingabe. Ich werde als Antwort auf Basis markieren, ich kann auch nichts besseres sehen. War nur wirklich überrascht, dass es als Standardformat fehlt. Muss ziemlich oft auftauchen. –

+0

es ist da mit den Schrägstrichen drin aber leider nicht mit Leerzeichen. Danke –

3

Das Datumsformat DD MM YYYY keine 'offizielle' Format (mit nur Leerzeichen und keine Perioden), deshalb gibt es kein Format-Code für sie in SQL Server. Sie können die in der Frage erwähnte Problemumgehung oder die FORMAT-Funktion in SQL Server 2012 oder höher verwenden: FORMAT(GETDATE(), N'dd MM yyyy').

Es gibt andere Abhilfen, aber keiner von ihnen ist schön, einschließlich diesem contraption: RIGHT('0' + CONVERT(VARCHAR(2), DAY(@date)), 2) + ' ' + RIGHT('0' + CONVERT(VARCHAR(2), MONTH(@date)), 2) + ' ' + CONVERT(VARCHAR(4), YEAR(@date))

Eine weitere Option ist ein CLR Funktion und Verwendung .NET erstellen Daten zu formatieren. CLRs sind seit 2005 verfügbar.

Sie können eine Kalendertabelle erstellen und ein Feld mit dem gewünschten Format hinzufügen. Sie können dieser Tabelle beitreten, um die formatierte Zeichenfolge für jedes Datum abzurufen.

Im Allgemeinen ist das Formatieren des Ergebnisses nicht die Verantwortung des SQL-Servers, verschieben Sie dies in die Anwendung, die die Daten verwendet.

+0

Die Anwendung ist SQL Server - es aktualisiert einen denormalisierten Wert in einer Berichtstabelle als Teil eines größeren Batches von SQL. Es gibt keine zusätzliche Anwendung zum Aktualisieren. –

+0

Aktualisieren eines einzelnen Feldes mit dem formatierten Datum darin (und nur das Datum) oder ist es mit etwas anderem verkettet. Der Teil 'Im Allgemeinen' bedeutet, dass Sie manchmal nicht vermeiden können, dies außerhalb des SQL Servers zu tun. – Pred

Verwandte Themen