datetime format in sql server 2008

Ich habe unten Code verwendet, um eine datetime in String zu konvertieren,

DECLARE @StartDate datetime = '08/07/2015 12:10 AM' set @StartDate = dateadd(hour,12, @StartDate); select CONVERT(VARCHAR(10),@StartDate, 101) + RIGHT(STUFF(CONVERT(VARCHAR(32), @StartDate,100), 18, 0, ' '),8) 

aber ich bekomme die Ausgabe als "08/07/201512: 10 PM", es gibt keinen Platz zwischen date und Uhrzeit, Wie kann ich das korrigieren?

Wenn ich richtig verstanden dein Problem dann gibt es kleine Korrektur in Ihrem Code erforderlich. Ich habe + '' + dh ein Leerzeichen zwischen deinem date konvertieren und das richtige Zeug. Der vollständige Code ist wie unten angegeben.

 DECLARE @StartDate DATETIME = '08/07/2015 12:10 AM' SET @StartDate = DATEADD(HOUR,12, @StartDate); SELECT CONVERT(VARCHAR(10),@StartDate, 101) +' '+ RIGHT(STUFF(CONVERT(VARCHAR(32),@StartDate,100), 18, 0, ' '),8) 

Ergebnis

 08/07/2015 12:10 PM 

dh Raum zwischen date und Uhrzeit auch Platz zwischen 12:10 und PM

Um den neuen Fall zu decken:

 DECLARE @StartDate DATETIME = '08/07/2015 2:10 AM' SET @StartDate = DATEADD(HOUR,12, @StartDate); SELECT CONVERT(VARCHAR(10),@StartDate, 101) +' '+ LTRIM(RIGHT(STUFF(CONVERT(VARCHAR(32),@StartDate,100), 18, 0, ' '),8)) 

Ergebnis

 08/07/2015 2:10 PM 

dh kein zusätzlicher Platz, wenn die time wie 2:10 Uhr ist

Hier ist ein path, es zu tun:

 DECLARE @StartDate datetime = '2015-08-07T00:10:00'; SET @StartDate = dateadd(hour,12, @StartDate); SELECT @StartDate As StartDate, CONVERT(CHAR(10), @StartDate, 101) + ' ' + -- DateString, SUBSTRING(CONVERT(CHAR(19), @StartDate, 100), 13, 5) + ' ' + -- TimeString RIGHT(CONVERT(CHAR(19), @StartDate, 100), 2) As DateString -- AM/PM 

Ergebnis:

 StartDate DateString ----------------------- ------------------- 2015-08-07 12:10:00.000 08/07/2015 12:10 PM 

Das folgende Snippet erzeugt die Ausgabe, die Sie in der Frage angegeben haben.

 SET DATEFORMAT MDY; DECLARE @StartDate DATETIME = '08-07-2015 12:10 AM'; SET @StartDate = DATEADD(HOUR, 12, @StartDate); SELECT CONVERT(VARCHAR, @StartDate, 103) + ' ' + CONVERT(VARCHAR, CAST(@StartDate AS TIME), 108) + CASE WHEN DATEPART(HOUR, @StartDate) < 12 THEN ' AM' ELSE ' PM' END; 

NB Wie andere schon erwähnt haben, wäre es besser, mit ISO-Format für Eingabedaten zu arbeiten.

Aktualisiertes dateformat von DMY zu MDY und explizit Hinzufügen von AM / PM zum Ende.