4

我正在写一份需要每天显示一个值的报告。我有查询的开始日期和结束日期,但我希望避免丢失日期,以防表不包含特定日期的值。我正在考虑创建一个基本日期范围表,该表包含开始和结束之间的所有日期,然后将其与数据表连接起来以显示每一天的值。

我找到了一些适用于 mySQL、SQL Server 等的脚本,但没有找到适用于 SQLite 的脚本。有没有办法用日期范围快速填充表格?

谢谢

4

2 回答 2

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);
/* #… */

每行在表中产生 2 N行,最大的行数是#N2N-1

可以在 SQL Fiddle 上找到(并使用)该方法的演示。

于 2012-04-30T08:27:23.047 回答
0

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

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

只需将打印更改为表格上的插入即可。

如果您需要更多详细信息,您可能需要更详细的脚本。我可以为您指出一些,只是更具体地说明您的要求

于 2012-04-29T18:24:23.597 回答