以下是如何使用数字表扩展范围的方法:
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上找到并使用。
这取决于您想要的详细程度。 如果您只想要从A到B的日期,可以这样做:
declare @start datetime
set @start = '04/20/2012'
while @start <getdate() begin
print @start
set @start = dateadd(dd,1,@start)
end
只需将打印更改为在表格中插入即可。
如果您需要更多详细信息,可能需要更复杂的脚本。我可以指向一些,只要您对您的要求更具体。
sqlite
标签。很抱歉。不过,被接受的答案的基本思路是使用数字表。也许它也可以适用于你的情况。 - Andriy M