sql - 获取某个时间范围内的每小时

标签 sql sql-server sql-server-2008-r2

所以我想要生成特定时间范围内的所有小时。

因此,考虑到上午 11 点到下午 2:00 的范围,我会得到:

 11:00 AM
 12:00 PM
 1:00 PM
 2:00 PM

我试图避免存储商店可能开放的每个特定时间,而只存储范围(我需要将时间与其他时间进行比较)

谢谢

最佳答案

无需循环、递归 CTE 或数字表。

DECLARE 
  @start TIME(0) = '11:00 AM', 
  @end   TIME(0) =  '2:00 PM';

WITH x(n) AS 
(
  SELECT TOP (DATEDIFF(HOUR, @start, @end) + 1) 
  rn = ROW_NUMBER() OVER (ORDER BY [object_id]) 
  FROM sys.all_columns ORDER BY [object_id]
)
SELECT t = DATEADD(HOUR, n-1, @start) FROM x ORDER BY t;

关于sql - 获取某个时间范围内的每小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10986344/

相关文章:

T-SQL 查询,连接两个表,但仅返回表 1 中第二个表中的 1 行数据

sql-server - 为什么 sql server 自动对表变量的行进行排序?

mysql - Oracle 等效于 MySQL 更新忽略

mysql - Mysql 列上的索引的基数比不同计数低?

sql - 为什么我的 T-SQL 游标执行两次?

sql - 如何在 SQL Server 中的 case 语句内执行 SUM()

sql - ORDER BY 和 ROW_NUMBER() 是确定性的吗?

ssis - 如何将SSIS包部署到sql server实例

sql - MySQL 备份表(如果存在)

php - 如何从 PHP 建立多个 MySQL 连接