【问题标题】:How to get each day number of a month in SQL?如何在SQL中获取一个月的每一天?
【发布时间】:2022-01-19 02:54:33
【问题描述】:

有没有办法选择一个月的每一天?例如我有这个日期:2021-12-15,我想得到这个结果:

| Days| 
|--------| 
|  1|
|  2|
|  3|
|  4|
|  5|

.. 31

【问题讨论】:

  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。

标签: sql sql-server tsql


【解决方案1】:

您可以使用简单的递归 CTE 来生成给定日期内的数字列表和 eomonth()

declare @date date='20211215';

with d as (
    select 1 num
    union all
    select d.num + 1
    from d
    where d.num <= 31
)
select num as [Days]
from d
where num<=Day(EOMonth(@date));

【讨论】:

  • 哈,我实际上只是利用 EOMONTH() 输入了几乎相同的答案。不幸的是,递归 CTE 的性能不是很好,但如果我们谈论的是一个月中的几天,那么范围的大小是非常有限的,所以应该没问题。太糟糕了,GENERATE_SERIES() 似乎是 Postgres 特有的。
  • 我通常会根据使用情况使用计数/数字表,但一个月中的几天不会有明显差异,它可以用来说明方法。
【解决方案2】:

为了完整起见,有一个更简单的方法。

来自系统表的直接SELECT ...

SQL

DECLARE @date DATE ='2021-12-15';

SELECT DISTINCT number AS [Days]
FROM master..spt_values
WHERE number BETWEEN 1 AND DAY(EOMonth(@date));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多