首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从SQL中选择给定时间间隔之间的数据

如何从SQL中选择给定时间间隔之间的数据
EN

Stack Overflow用户
提问于 2016-09-21 18:40:13
回答 1查看 8.6K关注 0票数 2

我在SQL中有以下数据

需要sql队列:

我有10个标签,它每隔10秒连续登录到SQl。现在,我想要创建报告,like.....User将在此基础上提供时间间隔和标签名,它将在Excel中从表和显示中选择数据,假设我的输入是: interval is 2016-09-21 14.00.00 to 2016-09-21 22.00.00标记名称是:system\,我希望输出如下:

假设当时记录不存在,那么我需要空白/零值。,我想在VB6中创建它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-21 19:57:19

需要使用SQL语句从所需记录中选择所需字段。您说过只选择偶数分钟,所以SQL如下所示

代码语言:javascript
复制
SELECT
    fields
FROM table
WHERE
    (DateAndTime BETWEEN '2016-09-21 14:00' AND '2016-09-21 22:00')
AND
    (DATEPART(MINUTE, DateAndTime) % 60 = 0)

如果您甚至需要秒,也只需添加另一个和WHERE子句。

代码语言:javascript
复制
SELECT
    fields
FROM table
WHERE
    (DateAndTime BETWEEN '2016-09-21 14:00' AND '2016-09-21 22:00')
AND
    (DATEPART(MINUTE, DateAndTime) % 60 = 0)
AND
    (DATEPART(SECOND, DateAndTime) % 60 = 0)

为了回答上一个注释中的问题,我编写了一个可以工作的SQL查询。如果您使用SQL标记发布确切的需求,忽略vb6、vba标记,因为这实际上是所有的SQL,并且与运行它的环境无关,那么您将得到一个更好的答案。这会管用的。我建议将其合并到存储过程中。

这是通过创建一个表变量并用可能返回的时间值填充它来实现的。然后,它将加入要查询的表。当没有可连接的记录时,结果是来自第二个表的空值。

代码语言:javascript
复制
--select records on the hour from 8:00 to 5:00
DECLARE @MinTime datetime = '2016-9-9 09:00'   --need to parameterize
DECLARE @MaxTime datetime = '2016-9-10 17:00'  --need to parameterize
DECLARE @TempTime datetime = @MinTime

DECLARE @Times TABLE
(
    TimeValue datetime
)
WHILE @TempTime <= @MaxTime
BEGIN
    INSERT INTO @Times
    (
        TimeValue
    )
    VALUES
    (
        @TempTime
    )
    SET @TempTime = DATEADD(hour, 1, @TempTime)
END

SELECT
    CONVERT(varchar(10), TimeRange.TimeValue, 101) AS [Date]
    ,CONVERT(varchar(10), TimeRange.TimeValue, 108) AS [Time]
    ,ISNULL(Tag, 'NA')
    ,ISNULL(Value, 0)
FROM
    @Times TimeRange
LEFT JOIN
    table
ON
    (CONVERT(datetime, CONVERT(varchar(10), table.DateAndTime, 101) + ' ' + CONVERT(varchar(2), DATEPART(HOUR, table.DateAndTime)) + ':' + CONVERT(varchar(2), DATEPART(MINUTE, table.DateAndTime)) + ':' + CONVERT(varchar(2), DATEPART(SECOND, table.DateAndTime))) = TimeRange.TimeValue)
WHERE
    (TimeRange.TimeValue BETWEEN @MinTime AND @MaxTime)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39624204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档