【问题标题】:SQL WHERE clause with current time [closed]具有当前时间的 SQL WHERE 子句
【发布时间】:2021-07-27 02:25:14
【问题描述】:

我的 SQL 表是这样的

Start_Time  Query
21:00:00    Exec plugin1;
21:02:00    Exec plugin2;
21:04:00    Exec plugin3;

当我运行以下查询时,我得到一个空结果

SELECT Query
FROM [test].[dbo].[schedule]
WHERE Start_Time IN ( SELECT CONVERT(VARCHAR(5), GETDATE(), 108));

我也试过

SELECT Query
FROM [test].[dbo].[schedule]
WHERE Start_Time IN (select cast(CAST(GETDATE() as time) as varchar(5)));

如果Start_Time 等于我当前的系统时间,我如何让它返回Query

我正在尝试创建一个每分钟运行一次的 SSIS 任务,并检查时间是否等于当前时间(以 HH:MM 为单位),如果是,则返回查询并进一步执行。

注意:时间采用 24 小时格式。

【问题讨论】:

  • 请说明您要实现的逻辑。
  • 我不明白:当前时间等于到毫秒的可能性有多大?你预计会发生什么
  • @Charlieface 是的,当 sql 查询执行时,它不太可能精确到毫秒。所以,如果它可以匹配到分钟(HH:MM),我认为应该可以
  • 你可能想要WHERE Start_Time BETWEEN TIMEFROMPARTS(DATEPART(hh, GETDATE()), DATEPART(mi, GETDATE(), 0, 0, 0) AND DATEADD(mi, 1, TIMEFROMPARTS(DATEPART(hh, GETDATE()), DATEPART(mi, GETDATE(), 0, 0, 0))

标签: sql sql-server time where-in


【解决方案1】:

由于您正在执行VARCHAR(5),因此将您的子选择更改为以下内容。

SELECT CONVERT(VARCHAR(5), GETDATE(), 108)+':00'

否则,如果您想要精确到秒,您可以这样做。

SELECT CONVERT(VARCHAR(8), GETDATE(), 108)

【讨论】:

  • 嘿,这对我有用,但我有一个问题,有没有办法我们可以添加一个条件,如果当前时间在 start_time 的 +2 分钟内,返回查询(假设我的时间间隔是更大,例如 30 分钟或更长时间)
  • @TNT 是的,您可以将整个 WHERE 子句更改为 WHERE DATEDIFF(MI,start_time,CONVERT(VARCHAR(5), GETDATE(), 108)+':00') BETWEEN 0 AND 2
【解决方案2】:

请试试这个:

SELECT Query
FROM [schedule]
WHERE Start_Time = CONVERT(varchar(8),getdate(),8) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多