【问题标题】:Specific Time Range Query in SQL ServerSQL Server 中的特定时间范围查询
【发布时间】:2009-05-19 21:43:22
【问题描述】:

我正在尝试查询特定的时间范围:

  • 即2009 年 3 月 1 日 - 2009 年 3 月 31 日
  • 每天早上 6 点到晚上 10 点之间
  • 仅限周二/周三/周四

我已经看到您可以获取特定范围的数据,但只能获取从开始到结束的数据,这更加具体。我没有看到任何可以直接帮助我解决此问题的 SQL Server 命令,那么其他人对您将如何构建它有任何想法吗?

我见过this,但我认为它对于这个范围还不够具体。

谢谢!

【问题讨论】:

  • 日期和时间是在同一列还是分开的?
  • 同一列 - 它只是一个日期时间字段

标签: sql-server-2005 datetime


【解决方案1】:

我假设您希望所有这三个都作为选择标准的一部分。您需要在 where 中添加一些语句,但它们与您的问题所包含的链接相似。

SELECT *
  FROM MyTable
  WHERE [dateColumn] > '3/1/2009' AND [dateColumn] <= DATEADD(day,1,'3/31/2009') 
        --make it inclusive for a datetime type
    AND DATEPART(hh,[dateColumn]) >= 6 AND DATEPART(hh,[dateColumn]) <= 22 
        -- gets the hour of the day from the datetime
    AND DATEPART(dw,[dateColumn]) >= 3 AND DATEPART(dw,[dateColumn]) <= 5 
        -- gets the day of the week from the datetime

希望这会有所帮助。

【讨论】:

  • dateadd 的语法是 DATEADD(datepart,number,date) 示例应该是:...&lt;= DATEADD(day, 1, '3/31/2009') 来源:Technet
  • 是的,但是如果时间不精确到确切的时间,例如如果您希望在上午 6:15 到上午 10:35 的时间范围内,您将如何执行此操作?
【解决方案2】:

你可以试试这个(我今天没有sql server所以无法验证语法,抱歉)

select attributeName
  from tableName
 where CONVERT(varchar,attributeName,101) BETWEEN '03/01/2009' AND '03/31/2009'
   and CONVERT(varchar, attributeName,108) BETWEEN '06:00:00' AND '22:00:00'
   and DATEPART(day,attributeName) BETWEEN 2 AND 4

【讨论】:

  • 谢谢 :) 这与 Giggy 的建议非常相似。我最初在他的建议之后尝试了这个,但决定使用严格的等号,因为它们消除了“之间”的哪一部分是包容性的歧义:)
【解决方案3】:

我(在 PGadmin4 上使用 PostgrSQL)查询了 2017 年 11 月 21 日中午之后或之后的结果,如下所示(考虑到我的数据库上的小时显示格式):

select * from Table1 where FIELD >='2017-11-21 12:00:00' 

【讨论】:

    【解决方案4】:
    select * from table where 
    (dtColumn between #3/1/2009# and #3/31/2009#) and 
    (hour(dtColumn) between 6 and 22) and 
    (weekday(dtColumn, 1) between 2 and 4) 
    

    【讨论】:

    • 这是有效的 SQL Server 2005 语法吗?这不是根据我的 SQLServer
    • 这在 2008 年还能用吗?似乎有用的日期功能要到 2012 年才可用。
    • 我真的不认为这是一个真正的T-sql方法。
    【解决方案5】:

    如果您想获得特定时间段的结果,请使用以下查询:

    Select * from [your_table_name] 
    where date between '2021-10-05' AND '2021-12-10'
    

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      相关资源
      最近更新 更多