Mysql 如何使用以“select”开头且不使用默认表的SQL创建日期序列?
因此,我尝试在SQL中创建一个日期序列,但脚本有一些限制: 1.它必须以select开头。 2.它不能使用递归。 3.它不能使用默认表 原因是它不会在MSSQL中运行,而是在BI工具中运行,BI工具具有类似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
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行。