Mysql 如何使用以“select”开头且不使用默认表的SQL创建日期序列?

Mysql 如何使用以“select”开头且不使用默认表的SQL创建日期序列?,mysql,sql,date,select,Mysql,Sql,Date,Select,因此,我尝试在SQL中创建一个日期序列,但脚本有一些限制: 1.它必须以select开头。 2.它不能使用递归。 3.它不能使用默认表 原因是它不会在MSSQL中运行,而是在BI工具中运行,BI工具具有类似SQL的语法,但限制更大 我已经找到了这些解决方案: WITH CTE_DatesTable AS ( SELECT CAST('2013-05-20' as datetime) AS [date] UNION ALL SELECT DATEADD(dd, 1, [date]) FROM CT

因此,我尝试在SQL中创建一个日期序列,但脚本有一些限制: 1.它必须以select开头。 2.它不能使用递归。 3.它不能使用默认表

原因是它不会在MSSQL中运行,而是在BI工具中运行,BI工具具有类似SQL的语法,但限制更大

我已经找到了这些解决方案:

WITH CTE_DatesTable
AS
(
SELECT CAST('2013-05-20' as datetime) AS [date]
UNION ALL
SELECT DATEADD(dd, 1, [date])
FROM CTE_DatesTable
WHERE DATEADD(dd, 1, [date]) <= '2016-10-18'
)
SELECT date FROM CTE_DatesTable
OPTION (MAXRECURSION 0);
这是:

select  dateadd(day, number, '2014-1-1')
from 
(select distinct number from master.dbo.spt_values
 where name is null
) n
where dateadd(day, number, '2014-1-1') < '2017-1-1'

但是两者都违反了限制,所以我不能使用它们。我考虑使用第二个脚本,创建一个列号和名称的表,就像master.dbo.spt_值一样,但是这个脚本必须具有相同的限制,所以我几乎回到了最初的问题

您可以尝试生成一个包含日期列表的表,然后使用如下循环逻辑从该表中选择所有值

声明@date='yyyy-mm-dd'日期

创建临时表日期\u seq date


而@date必须以select开头表示什么?如果您使用的是非标准的查询语言,那么我们应该如何猜出哪些是有效的,哪些是无效的?必须从Select开始,这意味着BI工具SiSense除了任何以其他内容开始的查询之外都不会。它不是一种不同的语言,只是普通SQL的一个非常有限的版本。我知道这不是很有帮助,但这就是我必须要做的,对不起。我经常看到的解决方案令人失望,但实际上很简单,就是创建一个表格,其中所有日期都在可行需求范围内。对于32位Unix时间范围1970–2038中的所有日期,该表将有约25000行。