Sql server SQLServer2008中的日期时间格式

Sql server SQLServer2008中的日期时间格式,sql-server,sql-server-2008,Sql Server,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/0

我使用下面的代码将日期时间转换为字符串

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”,日期和时间之间没有空格,我如何更正这个问题?

下面的代码片段将生成您在问题中指出的输出

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;
设置日期格式MDY;
声明@StartDate日期时间='08-07-2015 12:10 AM';
设置@StartDate=DATEADD(小时,12,@StartDate);
选择CONVERT(VARCHAR,@StartDate,103)+”+
转换(VARCHAR,CAST(@StartDate作为时间),108)+
当DATEPART(HOUR,@StartDate)<12时,则“AM”或“PM”结束;
注意:正如其他人所指出的,您最好使用ISO格式输入日期


将dateformat从
DMY
更新为
MDY
,并在末尾显式添加AM/PM。

以下代码片段将生成您在问题中指出的输出

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;
设置日期格式MDY;
声明@StartDate日期时间='08-07-2015 12:10 AM';
设置@StartDate=DATEADD(小时,12,@StartDate);
选择CONVERT(VARCHAR,@StartDate,103)+”+
转换(VARCHAR,CAST(@StartDate作为时间),108)+
当DATEPART(HOUR,@StartDate)<12时,则“AM”或“PM”结束;
注意:正如其他人所指出的,您最好使用ISO格式输入日期


将dateformat从
DMY
更新为
MDY
,并在末尾显式添加AM/PM。

以下是一种方法:

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

以下是一种方法:

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

如果我正确理解了您的问题,那么代码中需要进行一些小的修改。我添加了+''+,也就是说,在日期转换和正确的内容之间有一个空格。完整代码如下所示

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
08/07/2015 2:10 PM
i、 e.日期和时间之间的间隔以及12:10和下午之间的间隔

若要涵盖新的案例,请提供:

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 12:10 PM
08/07/2015 2:10 PM

i、 e.如果我正确理解了您的问题,那么代码中需要进行一些小的更正。我添加了+''+,也就是说,在日期转换和正确的内容之间有一个空格。完整代码如下所示

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
08/07/2015 2:10 PM
i、 e.日期和时间之间的间隔以及12:10和下午之间的间隔

若要涵盖新的案例,请提供:

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 12:10 PM
08/07/2015 2:10 PM

i、 e.当时间为下午2:10时,没有额外的空间,而不是使用本地化格式(是7月8日还是8月7日?),使用一个不变的文本,即ISO 8601格式用于完整日期(例如
20150707T00:10:00
),或仅用于日期的未分离格式(例如
20150708
)。您不需要使用奇怪的转换来输入日期文字。如果你发现自己这样做了,那就是你做错了事情。是8月7日还是7月8日?@ZoharPeled,8月7日建议在UI级别而不是数据库级别处理格式化(包括日期格式化)。在SQL中很难做到这一点的原因是SQL并不是用来进行格式化的。与其使用本地化格式(是7月8日还是8月7日?),不如使用一种不变的文本格式,即ISO 8601格式用于完整日期(例如
20150707T00:10:00
)或仅用于日期的未分离格式(例如
20150708
)。您不需要使用奇怪的转换来输入日期文字。如果你发现自己这样做了,那就是你做错了事情。是8月7日还是7月8日?@ZoharPeled,8月7日建议在UI级别而不是数据库级别处理格式化(包括日期格式化)。在SQL中如此困难的原因是SQL不打算进行格式化。它的结果是“08/07/2015 12:10PM”12:10和PM之间没有空格,它的结果是“08/07/2015 12:10PM”12:10和PM之间没有空格,如果时间是下午2:10,那么我们在日期和时间之间还有一个空格如果时间是下午2:10,然后我们在日期和时间之间多了一个空格