繁体   English   中英

2个日期之间的所有年份和月份SQL

[英]All years and months between 2 dates SQL

我有一个小问题,我有一个名为project的表,看起来像这样:

---------------------------------------
 ProjectId  | StartDate   | EndDate   |
---------------------------------------
     1      | 01/01/2015  | 31/12/2017|

是否可以在这些日期之间获得所有月份和年份,如下所示:

--------------------
| Month   |   Year  |
--------------------
    1     |   2015  |
    2     |   2015  |
    3     |   2015  |
    4     |   2015  |
    5     |   2015  |
    6     |   2015  |
    7     |   2015  |
    8     |   2015  |
    9     |   2015  |
    10    |   2015  |
    11    |   2015  |
    12    |   2015  |
    1     |   2016  |
    2     |   2016  |
    3     |   2016  |
    4     |   2016  |
    .     |     .   |
    .     |     .   |
    .     |     .   |
    12    |   2017  |

如果您的数据库是sql server,则可以运行以下代码来获取结果。

DECLARE @DateStart DATETIME = '2015-01-01'
DECLARE @DateEnd DATETIME = ' 2017-12-31';
WITH Dates AS
(
    SELECT DATEADD(DAY, -(DAY(@DateStart) - 1), @DateStart) AS [Date]
    UNION ALL
    SELECT DATEADD(MONTH, 1, [Date])
    FROM Dates
    WHERE [Date] < DATEADD(DAY, -(DAY(@DateEnd) - 1), @DateEnd)
)
SELECT
MONTH([Date]) AS [Month],
YEAR([Date]) AS [Year]
FROM Dates;

希望它会有所帮助。 如果您需要更多帮助,可以查看以下链接https://blog.sqlauthority.com/2014/12/22/sql-server-list-the-name-of-the-months-between-date-ranges -第2部分/

这是使用PostgreSQL函数generate_seriesextract

SELECT extract(month FROM date) AS month, extract(year FROM date) AS year
FROM (
    SELECT generate_series('2015-01-01'::date, '2017-12-31'::date, '1 month'::interval) AS date
) AS date_range

您需要对此进行修改以使用表中的日期:

SELECT extract(month FROM range) AS month, extract(year FROM range) AS year
FROM (
    SELECT generate_series(StartDate, EndDate, '1 month'::interval) AS range
    FROM project
    WHERE ProjectId = 1
) AS date_range

在Sql Server中,查询您的日期类型

    ;with datecte (date)
AS
 (
    SELECT Convert(date,'01/01/2015',105)
    UNION ALL
    SELECT DATEADD(month,1,date)
    from datecte
    where DATEADD(month,1,date)<= (Select Convert(date,'31/12/2017',105))
)
select month(date),YEAR(date) from datecte

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM