SELECT DATEADD(DAY, -1, dt) FROM (SELECT DATEADD(YEAR, 0, GETDATE()) AS dt) WHERE dt > DATEADD(YEAR, -5, GETDATE()) 这段代码有什么问题,为什么我执行会报错
时间: 2024-01-13 11:04:37 浏览: 25
这段代码的问题在于它没有指定输出的列名。你需要在子查询中给 dt 起一个别名,例如:
```
SELECT DATEADD(DAY, -1, dt) AS previous_date
FROM (SELECT DATEADD(YEAR, 0, GETDATE()) AS dt) AS subquery
WHERE dt > DATEADD(YEAR, -5, GETDATE())
```
这样就能正确地输出结果了。至于为什么会报错,可能是因为你的 SQL 环境对于没有指定列名的查询不允许执行。
相关问题
帮我把这一段代码改成不用with as也能实现同样的功能:WITH cte AS (SELECT DATEADD(YEAR, 0, GETDATE()) AS dt UNION ALL SELECT DATEADD(DAY, -1, dt) FROM cte WHERE dt > DATEADD(YEAR, -5, GETDATE()) -- 相当于推5年前的今天往前推1825天(即5年) ) select CONVERT(VARCHAR(10), dt,120) 工作日期 from cte where datepart(weekday, dt) !=1 -- 排除星期天 order by dt desc option (MAXRECURSION 0); 。请写出代码
可以使用递归函数来代替 with as,以下是修改后的代码:
```
CREATE FUNCTION cte(@dt DATE)
RETURNS TABLE
AS RETURN
(
SELECT DATEADD(YEAR, 0, @dt) AS dt
UNION ALL
SELECT DATEADD(DAY, -1, dt)
FROM cte
WHERE dt > DATEADD(YEAR, -5, @dt)
)
SELECT CONVERT(VARCHAR(10), dt, 120) 工作日期
FROM cte(GETDATE())
WHERE datepart(weekday, dt) != 1
ORDER BY dt DESC
OPTION (MAXRECURSION 0);
```
需要注意的是,递归函数需要设置递归的初始值,这里我们将当前日期作为初始值传入函数中。另外,需要使用 OPTION (MAXRECURSION 0) 来避免递归次数过多导致函数无法执行。
datediff(year, 0, DATEADD(MONTH,-1,GETDATE())), 0)
函数`DATEDIFF(year, 0, DATEADD(MONTH,-1,GETDATE()))`的作用是计算从0年1月1日到当前日期前一个月的年份差。具体解释如下:
1. `GETDATE()`函数获取当前日期和时间。
2. `DATEADD(MONTH,-1,GETDATE())`函数将当前日期减去一个月,得到上个月的日期。
3. `DATEDIFF(year, 0, DATEADD(MONTH,-1,GETDATE()))`函数计算从0年1月1日到上个月日期之间的年份差。
请注意,这里的0年1月1日是一个参考日期,可以根据实际需求进行调整。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)