2016-07-25 115 views
0

我用下面的代码,日期时间转换为字符串,日期时间格式在SQL Server 2008

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) 

,但我得到的输出为“08/07/201512:10 PM”,有之间没有空格日期和时间,我怎样才能纠正这一点?

+0

而不是使用本地化格式(即7月8日或8月7日?),使用一个不变的字面量,即ISO 8601格式完整日期(例如'20150707T00:10:00')或仅用于日期的未分隔格式(例如'20150708')。你*不需要使用奇怪的转换来输入日期文字。如果你发现自己这样做,你做错了 –

+0

是8月7日还是7月8日? –

+0

@ZoharPeled,其8月7日 –

回答

1

如果我理解正确你的问题那么在你的代码需要小的修正。我在日期转换和正确的东西之间加了+''+,即空格。完整的代码如下所示。

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) 

结果

08/07/2015 12:10 PM 

即12:10和PM

之间的日期和时间也是空间之间的空间来覆盖提供了新的情况:

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)) 

结果

08/07/2015 2:10 PM 

即时没有多余空间时间是2:10 PM

+0

如果时间是下午2点10分,那么我们会在日期和时间之间再增加一个空格 –

0

下面的代码片断将产生您在问题中指出的输出。

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; 

N.B.正如其他人所指出的那样,您最好使用ISO格式输入日期。

更新dateformat从DMYMDY并明确添加AM/PM到最后。

+0

其结果是“08/07/2015 12:10 PM”12:10和PM之间没有空格, –

+0

@Jobin查看更新后的答案。 –

1

下面是做到这一点的一种方法:

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 

结果:

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