Sql 向“日期”列添加值导致溢出
我正在尝试上面的代码。如果我在没有ORDERBY子句的情况下运行它,它运行良好 SQL在使用ORDERBY子句时引发错误 向“日期”列添加值导致溢出Sql 向“日期”列添加值导致溢出,sql,sql-server,Sql,Sql Server,我正在尝试上面的代码。如果我在没有ORDERBY子句的情况下运行它,它运行良好 SQL在使用ORDERBY子句时引发错误 向“日期”列添加值导致溢出 请帮助我,据我所知,你的问题与订货无关。问题是递归CTE 此条件的计算结果始终为true: with MyDates as ( SELECT cast( '01-oct-2020' as date ) AS MyDate, DATENAME( DW, cast('01-oct-2020' as date
请帮助我,据我所知,你的问题与订货无关。问题是递归CTE 此条件的计算结果始终为true:
with MyDates as
(
SELECT
cast( '01-oct-2020' as date ) AS MyDate,
DATENAME( DW, cast('01-oct-2020' as date ) ) AS NameOfDay
UNION ALL
SELECT
DATEADD( DAY, 1, MyDate ) AS MyDate,
DATENAME( DW, DATEADD( DAY, 1, MyDate ) ) AS NameOfDay
FROM
MyDates
WHERE
DATEADD( DAY, 1, MyDate ) < DATEADD( DAY, -1, DATEADD( MONTH, 3, MyDate ) )
)
select
*
from
MyDates
order by
MyDate desc
option (maxrecursion 0)
是一个dbfiddle。它不会解决问题,但您应该将您的NameOfDay列移动到外部选择。CTE内部不需要它。我认为溢出是因为ORDER BY导致在应用maxrecursion选项之前对查询进行急切求值,因此CTE递归计算到无穷大,但实际上在通过9999-DEC-31时失败。无论如何,有比CTE更好的方法来生成日期范围。您使用的是哪种DBMS产品?SQL只是所有关系数据库使用的查询语言,而不是特定数据库产品的名称,您使用的是非标准日期函数。请为您正在使用的数据库产品添加。有比CTE更好的方法来生成日期范围。我很想知道我是一个新手,代码看起来像SQL Server代码,所以我添加了标签。请用您正在使用的数据库标记您的问题。谢谢Gorden,我可以问一下如何识别给定时间段内的第二个和第四个星期六吗?@user2922376。这就回答了你的问题。如果你还有其他问题,请问一个新问题。
DATEADD( DAY, 1, MyDate ) < DATEADD( DAY, -1, DATEADD( MONTH, 3, MyDate ) )
with MyDates as (
SELECT CAST( '2020-10-01' as date ) AS MyDate,
DATENAME(weekday, '2020-10-01') AS NameOfDay,
CAST( '2020-10-01' as date ) as orig_date
UNION ALL
SELECT DATEADD(DAY, 1, MyDate ) AS MyDate,
DATENAME(weekday, DATEADD( DAY, 1, MyDate ) ) AS NameOfDay,
orig_date
FROM MyDates
WHERE MyDate < DATEADD( MONTH, 3, orig_date )
)
select *
from MyDates
order by MyDate desc
option (maxrecursion 0);