【问题标题】:SQL Server 2012 Time Range Check?SQL Server 2012 时间范围检查?
【发布时间】:2013-04-19 20:15:26
【问题描述】:

在 MSSQL 2012 上使用纯 TSQL 确定当前时间是否在本小时的第 59 分钟和下一小时的第一分钟之间的智能方法是什么?

我不想从“现在”截断时间,我想截断日期,只做一个时间计算。

这让我有点接近:Datepart for time between (instead of Convert date) 但不完全是因为我需要根据当前时间而不是表值进行计算。

以下内容可能有助于说明服务器当前是否处于“糟糕时间”并应返回值 '1'

14:58:59 ,  Should not be considered in the "bad time"
14:59:00 ,  Should be considered in the "bad time"
14:59:04 ,  Should be considered in the "bad time"
14:59:57 ,  Should be considered in the "bad time"
15:00:02 ,  Should be considered in the "bad time"
15:01:26 ,  Should not be considered in the "bad time"
15:02:00 ,  Should not be considered in the "bad time"
15:02:01 ,  Should not be considered in the "bad time"

谢谢。

编辑:

此代码有效,但我确信这可以更有效地完成。欢迎所有建议。再次感谢。

declare @now time = ( select cast( sysutcdatetime() as time  ))
declare @floor time = ( select dateadd( minute , 59 , ( dateadd(hour,datediff(hour,0,@now),0) ) ) )
declare @ceiling time =(  select dateadd( minute , 2 , @floor ) )
if ( @now > @floor and @now < @ceiling )
begin
    select 1 as bit
end
select @now , @floor , @ceiling

【问题讨论】:

  • 您能否澄清一下“在第 59 分钟……和第一分钟之间”的意思?也许您可以列出一些示例,例如14:58:59, 14:59:00, 14:59:04, 14:59:57, 15:00:02, 15:01:26, 15:02:00, 15:02:01,并指出应该包括哪些?目前的描述是模棱两可的,因为BETWEEN 可能意味着也可能不意味着包含范围的每一端,以及结束范围是 00:01、00:01:59 还是其他。

标签: sql-server datetime time


【解决方案1】:
IF DATEPART(MINUTE, SYSDATETIME()) = 59
    PRINT '59th minute';

【讨论】:

    【解决方案2】:

    请根据需要替换@dt

    declare @dt datetime = '20130419 21:59:01'
    
    select case when datepart(minute, @dt) in (59,0)
                then 'Minute is between 59 and 1'
                else 'Minute is NOT between 59 and 1'
           end myMinute
    

    【讨论】:

      【解决方案3】:

      分钟(@dt)=59 或分钟(@dt)=0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多