如何在SQL的给定时间间隔内选择数据

时间:2016-09-21 18:40:13

标签: sql vba excel-vba sql-server-2008 vb6

我在SQL SQL Data i am having

中有以下数据

需要sql队列:

我有10个标签,它每隔10秒间隔连续登录到SQl。 现在我想创建类似的报告......用户将在此基础上提供时间间隔和标签名称,它将从表格​​和表格中选择数据。在Excel中显示 假设我的输入是: 区间 2016-09-21 14.00.00 2016-09-21 22.00.00 标记名称为 system \ Year 我想要关注输出:output result 假设当时没有记录,那么我需要空白/零值。 我想在VB6中创建它。

1 个答案:

答案 0 :(得分:3)

您需要使用一个SQL语句,从您想要的记录中选择所需的字段。你说你试图只选择偶数分钟,所以SQL就像是

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子句中添加另一个AND。

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并且与运行它的环境无关,那么您可以获得更好的答案。这会奏效。我建议将其纳入存储过程。

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

--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)