【问题标题】:Convert a 12 hour format to 24 hour format in sql server在 sql server 中将 12 小时格式转换为 24 小时格式
【发布时间】:2013-10-24 10:22:42
【问题描述】:

在 sql server 2000 表之一中有以下格式的日期值

10/1/2013 10:39:14 PM
10/1/2013 6:39:04  PM
10/1/2013 8:19:31  AM
10/1/2013 3:35:40  AM

如何将上述格式数据值转换为24小时日期格式,如下图

10/1/2013 10:39
10/1/2013 18:39
10/1/2013 8:19
10/1/2013 3:35

【问题讨论】:

  • 您是否将日期存储为 varchar?或日期?你能显示表模式吗?

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2


【解决方案1】:

在 SQL Server 2012 中,我们可以使用 Format 函数来获得合适的日期时间格式。使用大写字母 'HH:mm:ss' 表示 24 小时日期时间格式。

示例 -

查询(24 小时格式):

Select Format(cast('2016-03-03 23:59:59' as datetime),'dd-MMM-yyyy HH:mm:ss','en-us'). ('HH:mm:ss' in Capital letters)

结果

03-Mar-2016 23:59:59

查询(12 小时格式):

Select Format(cast('2016-03-03 23:59:59' as datetime),'dd-MMM-yyyy hh:mm:ss','en-us'). ('hh:mm:ss' in Capital letters)

结果

03-Mar-2016 11:59:59

【讨论】:

  • 此查询返回错误,它说“轻量级池不支持公共语言运行时 (CLR) 执行。禁用以下两个选项之一:“启用 clr”或“轻量级池”。除了格式函数之外,还有其他方法可以将时间转换为 12 小时格式吗?
【解决方案2】:

试试这个:

首先将varchar 日期转换为datetime,然后您可以按照您想要的方式对其进行操作:

-- CONVERT TO DATETIME TO GET 24HR FORMAT
SELECT CONVERT(DATETIME, '10/1/2013 6:39:04  PM', 0)  
-- Concatenate in required format
SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, '10/1/2013 6:39:04  PM', 0), 101) 
+ ' '+ CONVERT(VARCHAR(5),CONVERT(DATETIME, '10/1/2013 6:39:04  PM', 0), 108)

【讨论】:

    【解决方案3】:
    Declare @s DateTime = '2012-12-26 11:00:00.000 PM'
    select stuff(convert(varchar(19), @s, 126),11,1,' ')
    

    【讨论】:

    • 我在 sql-server 2012 中做了这个
    • 第一行有一个隐式转换。如果 OP 将日期存储为字符串,最好在示例中使用 varchar 变量
    • 谢谢..但我不认为我可以在日期时间变量中存储 varchar 值
    • Declare @s DateTime = '2012-12-26 11:00:00.000 PM' 是否正确?
    • 这是真的,它可以在 sql 2005 及更高版本中工作..但我的数据库是 sql 2000
    【解决方案4】:

    试试这个

    DECLARE @MyDateTime; 
    SET @MyDateTime = '2016-03-03 23:59:59'
    SELECT FORMAT(CONVERT(DATETIME,@MyDateTime,108),'dd-MMM-yyyy HH:mm:ss','en-us')
    

    【讨论】:

      【解决方案5】:
      declare @Hour_Part AS VARCHAR(50)
      declare @Min_Part AS VARCHAR(50)
      declare @Sec_Part AS VARCHAR(50)
      declare @PMORAM AS VARCHAR(5)
      SELECT @Hour_Part = DATEPART(HOUR,CONVERT(VARCHAR(50),GETDATE(),108))
      SELECT @PMORAM =  RIGHT(CONVERT(VARCHAR(30), GETDATE(), 9), 2) 
      IF @Hour_Part = 12 AND @PMORAM = 'AM'
      BEGIN
      SET @Hour_Part = '00'
      select @Min_Part = DATEPART(MINUTE,CONVERT(VARCHAR(50),GETDATE(),108))
      select @Sec_Part = DATEPART(SECOND,CONVERT(VARCHAR(50),GETDATE(),108))
      select @Hour_Part + ':' + @Min_Part + ':' + @Sec_Part AS DateTime24
      END
      ELSE IF @Hour_Part > 0 AND @Hour_Part < 12 AND @PMORAM = 'PM'
      BEGIN
      SET @Hour_Part = @Hour_Part + 12
      select @Min_Part = DATEPART(MINUTE,CONVERT(VARCHAR(50),GETDATE(),108))
      select @Sec_Part = DATEPART(SECOND,CONVERT(VARCHAR(50),GETDATE(),108))
      select @Hour_Part + ':' + @Min_Part + ':' + @Sec_Part AS DateTime24
      END
      ELSE
      BEGIN
      select @Min_Part = DATEPART(MINUTE,CONVERT(VARCHAR(50),GETDATE(),108))
      select @Sec_Part = DATEPART(SECOND,CONVERT(VARCHAR(50),GETDATE(),108))
      select @Hour_Part + ':' + @Min_Part + ':' + @Sec_Part AS DateTime24
      END
      

      【讨论】:

        猜你喜欢
        • 2019-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        相关资源
        最近更新 更多