2016-10-30 2 views
0

Ich versuchte verschiedene Funktionen Datepart für Jahr, Monat und Tag zu einem Datum zu konvertieren, aber ich bekomme Fehler. DieseDatum Manipulation in SQL

ist, was ich versucht:

SELECT 
    CONVERT(datetime, CHAR(YEAR(GETDATE()) + CHAR(DATEPART(MM, '02')) + CHAR(DATEPART(DD, '28'))); 

Wenn dieser Code ausgeführt wird, ich einen Fehler:

Conversion failed when converting date and/or time from character string.

Falls ich diese Apostrophe auf 02 zu entfernen und 28 dann SQL null zurück .

Vielen Dank im Voraus

+0

Dies ist offensichtlich SQL Server also habe ich es als solches markiert. –

Antwort

0

dieses Versuchen Sie stattdessen:

SELECT CONVERT(datetime, DATENAME(YEAR, GETDATE()) + '-02-28') 

Sie nicht einen Tag oder einen Monat aus einem String wie '02' extrahieren kann. Aber das ist sowieso nicht nötig.

+0

Es wird immer noch eine Ausnahme ausgelöst: Die Konvertierung ist beim Konvertieren von Datum und/oder Uhrzeit aus der Zeichenfolge fehlgeschlagen. Danke für deine Bemerkung, ich werde es mir merken –

+0

@JoelMayerMukanya. . . Was passiert, wenn Sie 'CONVERT (datetime, '2016-02-18')' '? Dies sollte gleichwertig sein. –

+0

Es ist in Ordnung, lol. Ich benutzte beide Antwort –

2

Wenn 2012+ Sie auch DateFromParts versuchen könnte()

Select DateFromParts(2016,2,28) 

Returns

2016-02-28 
+0

Dank John: Ich benutze dies, SELECT DATENFROMPARTS (DATENAME (YEAR, GETDATE()), 02,28); Ich kombinierte beide Antworten, dann war das Ergebnis, was ich erwartet hatte. –

+0

@JoelMayerMukanya Nur um es etwas abzukürzen Wählen Sie DateFromParts (Year (GetDate()), 2,28) –

0

Wie Sie in der Dokumentation zu DATEPART, der zweite Parameter lesen kann, sollte ein Datum Parameter sein:

In Ihrer SQL-Anweisung missbrauchen Sie diese Funktion zweimal ... folgende ungültig sind, weil der zweite Parameter nicht in einen Datumstyp konvertiert werden kann:

  • DATEPART(MM,'02')
  • DATEPART(DD,'28')

Sie die DATEFROMPARTS Funktion in SQL Server 2012 ein Datum aus seinen Teilen konstruieren können mit und höhere Versionen:

Returns a date value for the specified year, month, and day.

Oder wenn Sie die Zeit Teile in so gut gefüllt benötigen, DATETIMEFROMPARTS

Returns a datetime value for the specified date and time.


In Versionen vor SQL Server 2012, kann dies wie folgt geschehen:

DATEADD(MM, (@year - 1900) * 12 + @month - 1 , @day - 1);