【问题标题】:Get hour:minutes from DATETIME2从 DATETIME2 获取小时:分钟
【发布时间】:2016-11-12 05:57:00
【问题描述】:

我在 SQL Server 2008 R2 中遇到问题。我想从DATETIME2 列中获取HH:mm。当我写下这句话时:

SELECT CONVERT(VARCHAR(5), getdate(), 8)

我得到了完美的结果,即11:19,但是当我尝试从以下位置获得时间时:

SELECT (CONVERT(VARCHAR(5), '1900-01-01 01:10:00.0000000', 8))

我得到了结果1900,但我需要01:10

我怎样才能得到这个语句的结果?我知道有多个这样的问题/答案,但我没有找到任何与我的问题相匹配的答案。

【问题讨论】:

  • 你确实意识到这两个陈述是不相等的。 [1] 是使用样式 8 将日期时间转换为字符串。 [2] 是使用样式 8 将字符串转换为字符串

标签: sql-server tsql sql-server-2008-r2 datetime2


【解决方案1】:

在 SQL Server 端(例如在存储过程中),您可以使用这种转换:

declare @dt datetime2(0) = sysdatetime();

select @dt as [Date], left(convert(time(0), @dt, 108), 5) as [HH:mm];

如果您需要在客户端显示您的数据,例如报表或您的应用,最好使用客户端的格式化功能。通过这种方式,您可以将首选日历系统、12 小时制或 24 小时制等因素考虑在内。

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT RIGHT('0' + CONVERT(VARCHAR(2), 
    DATEPART(HOUR, '1900-01-01 01:10:00.0000000')), 2) hh, 
    DATEPART(minute, '1900-01-01 01:10:00.0000000') mm
    

    或者

    SELECT LEFT(CONVERT(TIME(0), '1900-01-01 01:10:00.0000000'), 2) hh , DATEPART(minute, '1900-01-01 01:10:00.0000000') mm

    【讨论】:

    • 这是从您的查询返回 1:10 但我想要 01:10
    • 感谢您的回复,但 2012 sql server 支持格式
    • 现在检查,2012 年我很难说
    【解决方案3】:

    对于许多格式的 24 小时日期时间长度是 19,所以你可以使用以下

     SELECT RIGHT('0' + CAST(DATEPART(HOUR, Substring('1900-01-01 01:10:00.0000000',1,19)) AS VARCHAR(2)), 2) + ':' + CAST(DATEPART(minute, substring('1900-01-01 01:10:00.0000000',1,19)) AS VARCHAR(2)) HHmm
    

    希望对你有帮助

    【讨论】:

    • @H.Fadlaallah 将 varchar 值 ':' 转换为数据类型 int 时转换失败
    【解决方案4】:

    试试这个,我想这就是你想要的。

    这将给出答案:1:10

    SELECT CONVERT(VARCHAR(5),CONVERT(DATETIME,'1900-01-01 01:10:00.000'),8)
    

    你也可以试试这个

    select convert(VARCHAR,DATEPART(HOUR,'1900-01-01 01:10:00.0000000'))+':'+CONVERT(VARCHAR,DATEPART(MINUTE,'1900-01-01 01:10:00.0000000'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2014-10-17
      相关资源
      最近更新 更多