1

我是 SQL 新手,时间函数与 mySQL 不同,所以我很难用有用的时间戳查询找到一个好的站点参考。

我无法找到在 SQL 中执行此查询的正确方法:

Id          Timestamp
-----------------------------------
1145744 2012-10-10 18:15:11.500
1145743 2012-10-10 18:15:11.313
1145742 2012-10-10 18:15:11.313
1145741 2012-10-10 18:15:11.253
1145740 2012-10-10 18:15:11.190
1145739 2012-10-10 18:15:11.190
1145738 2012-10-10 18:15:11.127
1145737 2012-10-10 18:15:11.067
1145736 2012-10-10 18:15:11.063
1145735 2012-10-10 18:15:10.940
1145734 2012-10-10 18:15:10.817


SELECT * from table WHERE Timestamp ... RANGE

我需要 2 个时间戳的范围,因此我可以通过以下参数选择行:

  1. 第二范围
  2. 分钟范围
  3. 小时范围
  4. 日范围
  5. 周范围
  6. 月份范围
  7. 年份范围

是否有一个函数可以输入 2 个时间戳并获取范围?或者这是我需要的功能组合?

任何好的网站参考都将非常受欢迎。MSDN 网站并没有帮助我隔离正确的做法。我一直在寻找大约一个小时,试图从今天下午 1:30 到下午 1:30 得到最后一天。

4

2 回答 2

4

您可以使用 <code>DATEPART</code> 来获取:

second, minute, hour, day, week, month, year

更多参考

使用where条件来获得所需的范围。

于 2012-10-11T04:21:12.387 回答
1

我很难弄清楚你真正想要什么。以下是基于您迄今为止的评论的一些示例:

10-11 或 1-5

SELECT * from table WHERE Timestamp >= '20121011 10:00'
                      and Timestamp <  '20121011 11:00'
SELECT * from table WHERE Timestamp >= '20121011 01:00'
                      and Timestamp <  '20121011 05:00'

或者如果您需要“今天”自动更改,那么

SELECT * from table WHERE Timestamp >= DateAdd(Hour,10,CAST(GetDate() as Date))
                      and Timestamp <  DateAdd(Hour,11,CAST(GetDate() as Date))

昨天下午 1:30 - 今天凌晨 3:00

SELECT * from table WHERE Timestamp >= '20121010 13:30'
                      and Timestamp <  '20121011 03:00'

是的,一天一个小时
现在,如果您要使用 DATEPART 来解决这个问题,假设 10-11

SELECT * from table WHERE DATEPART(hour,Timestamp) = 10

这将持续数天并且不会是SARGABLE,即无法在实际上不是您想要的索引上搜索它。


这些从哪里来?

  • 第二范围
  • 分钟范围
  • 小时范围
  • 日范围
  • 周范围
  • 月份范围
  • 年份范围
于 2012-10-11T04:49:37.193 回答