您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

想要显示来自SQL Server的12个月的名称

想要显示来自SQL Server的12个月的名称

With R(N)一个公共表表达式。从MDSN:

可以将公用表表达式(CTE)视为在单个SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句的执行范围内定义的临时结果集。CTE与派生表相似,因为它不存储为对象,并且仅在查询期间持续存在。与派生表不同,CTE可以自我引用,并且可以在同一查询中多次引用。

R是结果集(或表),您正在生成名称。和Nmonth数字。

该CTE特别是递归公用表表达式。从MSDN:

公用表表达式(CTE)提供了能够引用自身的显着优势,从而创建了递归CTE。递归CTE是其中重复执行初始CTE以返回数据子集直到获得完整结果集的CTE。

使用CTE时,我的建议是对名称进行描述。因此,对于您的示例,您可以使用以下代码

;WITH months(MonthNumber) AS
(
    SELECT 0
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < 12
)
select *
from months;

在我的版本中,months是您正在生成的结果集的名称,并且monthnumber是值。这将产生一个0到12之间的月份编号列表(请参阅Demo)。

结果:

| MONTHNUMBER |
---------------
|           0 |
|           1 |
|           2 |
|           3 |
|           4 |
|           5 |
|           6 |
|           7 |
|           8 |
|           9 |
|          10 |
|          11 |
|          12 |

然后SELECT紧随其后的语句使用CTE结果集的值来获取月份名称

最终查询(请参见Demo):

;WITH months(MonthNumber) AS
(
    SELECT 0
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < 12
)
SELECT LEFT(DATENAME(MONTH,DATEADD(MONTH,-MonthNumber,GETDATE())),3) AS [month]
FROM months;
SQLServer 2022/1/1 18:52:51 有540人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶