-3

给定一个指定的时间值和一个区间值:

Specified Time: 13:25:00
Interval Value: 00:20:00

如何过滤下表中的值以返回指定时间任一侧的指定时间间隔

12:45:24
13:05:00
13:50:30
14:50:32
15:15:10

我想要一个函数或查询来检查“13:25:00”是否与表中的任何时间有“00:20:00”差异。

输出应返回:

13:05:00
4

3 回答 3

1

如果我们正确理解您的问题,您希望所有时间都大于您给定(特殊)时间的 20 分钟。

为此,只需使用包含如下子句的 where 子句进行选择:abs(datediff(minute, tableDate, @specialdate)) > 20

SQLFiddle 示例和代码示例:

declare @specialDate datetime = '1900-01-01 13:25:00'

select *
  from SampleData
 where abs(datediff(minute, SomeDate, @specialDate)) > 20

请注意,我将 Datetime 列的日期设置1900-01-01为模糊参考,请根据您的设置进行调整。

您将需要ABS在行中确保datediff检查结果的两个变体(它可以带回 0、> 0 或 < 0)

参考文献:
MSDN: DATEDIFF
MSDN: ABS

于 2015-04-20T09:12:32.363 回答
1

根据您提供的信息,我假设您希望从列表中获取“特殊时间”任一侧的指定时间段的值。

这是一种使用方法DATEADD

-- temp table for your sample data
CREATE TABLE #times ( val TIME )

INSERT  INTO #times
        ( val )
VALUES  ( '12:45:24' ),
        ( '13:05:00' ),
        ( '13:50:30' ),
        ( '14:50:32' ),
        ( '15:15:10' )

DECLARE @special_time TIME = '13:25:00'      
DECLARE @diff_value TIME = '00:20:00'

-- variable will hold the total number of seconds for your interval
DECLARE @diff_in_seconds INT

-- gets the total number of seconds of your interval -> @diff_value 
SELECT  @diff_in_seconds = DATEPART(SECOND, @diff_value) + 60
        * DATEPART(MINUTE, @diff_value) + 3600 * DATEPART(HOUR, @diff_value)

-- get the values that match the criteria
SELECT  *
FROM    #times
WHERE   val = DATEADD(SECOND, @diff_in_seconds, @special_time)
        OR val = DATEADD(SECOND, -( @diff_in_seconds ), @special_time)

DROP TABLE #times

请注意,该WHERE子句通过加减差来过滤结果。减法是通过制作@diff_in_seconds负数来实现的。

于 2015-04-20T09:13:14.557 回答
0

这是一个解决方案:

create table t(t time);

insert into t
values
    ('12:45:24'),
    ('13:05:00'),
    ('13:50:30'),
    ('14:50:32'),
    ('15:15:10')

declare @st time = '13:25:00'
declare @dt time = '00:20:00'

select * from t
where abs(datediff(ss, t, @st)) - datediff(ss, '00:00:00', @dt) = 0

abs(datediff(ss, t, @st)将保持表中时间和特殊时间之间的秒数差异。您将此差异00:00:00与间隔之间的差异进行比较datediff(ss, '00:00:00', @dt)

输出:

t
13:05:00.0000000

小提琴 http://sqlfiddle.com/#!6/05df4/1

于 2015-04-20T09:34:29.540 回答