日期时间格式在SQL Server 2008
我用下面的代码,日期时间转换为字符串,日期时间格式在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”,有之间没有空格日期和时间,我怎样才能纠正这一点?
如果我理解正确你的问题那么在你的代码需要小的修正。我在日期转换和正确的东西之间加了+''+,即空格。完整的代码如下所示。
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
如果时间是下午2点10分,那么我们会在日期和时间之间再增加一个空格 –
下面的代码片断将产生您在问题中指出的输出。
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从DMY
到MDY
并明确添加AM/PM到最后。
其结果是“08/07/2015 12:10 PM”12:10和PM之间没有空格, –
@Jobin查看更新后的答案。 –
下面是做到这一点的一种方法:
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
而不是使用本地化格式(即7月8日或8月7日?),使用一个不变的字面量,即ISO 8601格式完整日期(例如'20150707T00:10:00')或仅用于日期的未分隔格式(例如'20150708')。你*不需要使用奇怪的转换来输入日期文字。如果你发现自己这样做,你做错了 –
是8月7日还是7月8日? –
@ZoharPeled,其8月7日 –