创建日期范围表

4
我正在撰写一份报告,需要每天显示一个值。我已经有了查询的开始和结束日期,但是我希望避免在表中不包含特定日期的值的情况下漏掉某些天。 我考虑创建一个基本日期范围表,其中包含开始和结束之间的所有日期,然后将其与数据表左连接以显示每天的值。 我找到了一些适用于MySQL、SQL Server等的脚本,但没有适用于SQLite的脚本。 是否有一种快速填充日期范围表的方法? 谢谢

可能是在SQL Server中获取日期范围内的所有日期的重复问题。 - Andriy M
谢谢@AndriyM,但是该线程包含了在MS SQL Server上使用T-SQL实现的具体示例。不幸的是(或者幸运的是,这取决于你问谁),我正在使用SQLite,这意味着我不能使用所指示的解决方案。 - itayw
我相信当我看到你的问题时,我的眼睛出了点问题,否则我无法解释为什么会错过sqlite标签。很抱歉。不过,被接受的答案的基本思路是使用数字表。也许它也可以适用于你的情况。 - Andriy M
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

以下是如何使用数字表扩展范围的方法:

SELECT
  datetime('now', N || ' seconds') AS DT
FROM numbers
WHERE N < strftime('%s', 'now', '1 minutes') - strftime('%s', 'now');
在这种情况下,数字表应该从0开始保存数字。 数字表是一个很有用的工具,可以用于许多目的。例如,您可以像这样初始化它:
CREATE TABLE numbers (N int);
/* #0 */ INSERT INTO numbers (N) SELECT 0;
/* #1 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #2 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #3 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #4 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #5 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #6 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #… */
每一行#N在表格中会产生2的N次方行,最大数为2N-1。 这种方法的演示可以在SQL Fiddle上找到并使用

1
@mr. kav 数字表非常有用,参见最佳方法是创建和填充数字表? - KM.

0

这取决于您想要的详细程度。 如果您只想要从A到B的日期,可以这样做:

declare @start datetime
set @start = '04/20/2012'
while @start <getdate() begin
  print @start
  set @start = dateadd(dd,1,@start)
end

只需将打印更改为在表格中插入即可。

如果您需要更多详细信息,可能需要更复杂的脚本。我可以指向一些,只要您对您的要求更具体。


谢谢,不过我正在寻找一种查询方式,可以动态计算日期以节省迭代处理时间。例如,我希望能够对一年的时间进行秒级别的详细分解。 - itayw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,