SELECT CONVERT(VARCHAR(20), GETDATE(), 23) + '星期' + CONVERT(VARCHAR(1), DATEPART(WEEKDAY, GETDATE())) AS date
时间: 2023-11-11 19:06:01 浏览: 152
这是一个 SQL Server 查询语句,作用是获取当前日期并格式化为“年-月-日 星期几”的形式。
具体解释如下:
- GETDATE() 函数获取当前日期和时间。
- CONVERT(VARCHAR(20), GETDATE(), 23) 将当前日期转换为 yyyy-mm-dd 的格式。
- DATEPART(WEEKDAY, GETDATE()) 获取当前日期是星期几,返回值为数字,1 表示星期日,2 表示星期一,以此类推。
- CONVERT(VARCHAR(1), DATEPART(WEEKDAY, GETDATE())) 将星期几的数字转换为单个字符,比如“1”转换为“日”。
- 最后使用字符串拼接符号“+”将日期和星期几拼接在一起,得到最终的格式化日期字符串。
相关问题
帮我把这一段代码改成不用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) 来避免递归次数过多导致函数无法执行。
阅读全文