【问题标题】:Construct DateTime using today's date at a specific time使用特定时间的今天日期构造 DateTime
【发布时间】:2012-07-24 16:37:42
【问题描述】:

我想知道当天的下午 4:30。以这种方式硬编码是行不通的:

SELECT '07242012 16:30:00.000'

事实证明,这比我想象的要困难。我该如何处理?

【问题讨论】:

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


    【解决方案1】:

    SQL Server 2000 / 2005:

    SELECT DATEADD(MINUTE, 30, DATEADD(HOUR, 16, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP)));
    
    -- or
    
    SELECT DATEADD(MINUTE, (16*60) + 30, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))
    
    -- or
    
    SELECT CONVERT(DATETIME, CONVERT(CHAR(9), CURRENT_TIMESTAMP, 112) + '16:30');
    

    SQL Server 2008+:

    SELECT CONVERT(DATETIME, CONVERT(DATE, CURRENT_TIMESTAMP)) + '16:30';
    

    SQL Server 2012:

    SELECT SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 16, 30);
    

    【讨论】:

    • @NathanSkert 我认为第一个代码块也可以在 7.0/6.5 中工作,但我不打算拼凑一个实例来证明它。 :-)
    • 完美。对于超过分钟的精度,请使用 DATETIMEFROMPARTS 函数指定秒和毫秒。
    【解决方案2】:

    可能最简单的做法是将当前日期/时间转换为日期(剥离时间),将其转换回日期时间以允许使用日期时间的重载+ (plus),最后转换您想要的文本时间到日期时间。如下:

    select cast(cast(sysutcdatetime() as date) as datetime) + cast('16:30' as datetime)
    

    返回(2018 年 1 月 11 日运行时):

    2018-01-11 16:30:00.000
    

    【讨论】:

    • 这看起来是一个合理的答案,但如果你能在这里添加一些解释会更好。一个单独的代码 sn-p 不如一个解释你正在做什么的段落,然后是说明这个想法的代码那么有用。
    • 我已经扩展了回复。希望现在看起来更有价值
    【解决方案3】:

    您可以根据需要使用日、小时、分钟等来构建它。

    SELECT CURDATE() - interval 1 DAY + interval 2 
    

    【讨论】:

      【解决方案4】:
       select(dateadd(day, datediff(day, 0, getdate()), 0) + '20:00') as specified_date
      

      specified_date - 输出列名

      20:00 - 指定时间(24 小时格式 - 默认)

      getdate() - 获取今天的日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2017-11-16
        • 2023-04-06
        • 2013-09-13
        • 2015-12-23
        相关资源
        最近更新 更多