SQL中有没有一种方法可以选择一个表中所有可用的天数,并且有30天的差异跳转?
我需要选择所有日期,从当前日期开始,在过去彼此之间有30天的跳跃。 例如,今天是10月18日,所以我需要得到9月18日,8月19日,7月20日SQL中有没有一种方法可以选择一个表中所有可用的天数,并且有30天的差异跳转?,sql,date,days,Sql,Date,Days,我需要选择所有日期,从当前日期开始,在过去彼此之间有30天的跳跃。 例如,今天是10月18日,所以我需要得到9月18日,8月19日,7月20日 我不能简单地编写函数current_date-30、current_date-60、current_date-90,因为数据的开头很长。如果您使用的是Oracle,您可以使用以下代码- WITH DATES(CUR_DATE, MON) AS (SELECT CURRENT_DATE CUR_DATE, 1 MON FROM DUAL
我不能简单地编写函数current_date-30、current_date-60、current_date-90,因为数据的开头很长。如果您使用的是Oracle,您可以使用以下代码-
WITH DATES(CUR_DATE, MON) AS (SELECT CURRENT_DATE CUR_DATE, 1 MON FROM DUAL
UNION ALL
SELECT D.CUR_DATE - 30, D.MON + 1
FROM DATES D
WHERE TO_CHAR(D.CUR_DATE, 'MM') > 1
AND TO_CHAR(D.CUR_DATE, 'YY') = TO_CHAR(SYSDATE, 'YY'))
SELECT * FROM DATES
这是小提琴。对于其他数据库,请发布您的DBMS产品。对于SQL Server,您可以使用以下代码:
;WITH cte_Date30Days(n, d, dte)
AS (
SELECT 0, 0, current_timestamp as dte
UNION ALL
SELECT n+1, d - 30, dateadd(day, -30, dte)
FROM
cte_Date30Days
WHERE n < 7-1
)
SELECT dte FROM cte_Date30Days;
只返回7行,但更改该值以满足您的需要。如果您使用Postgres,则使用generate\u series非常容易 这将返回从今天开始的过去12个月 如果今天是2019-10-18,则返回: 日期 ----- 2019-10-18 2019-09-18 2019-08-18 2019-07-18 2019-06-18 2019-05-18 2019-04-18 2019-03-18 2019-02-18 2019-01-18 2018-12-18 2018-11-18 2018-10-18 如果希望间隔30天而不是1个月,请使用:
select d::date as date
from generate_series(current_date,
current_date - interval '1 year',
interval '-30 day') as t(d)
你用的是什么产品?SQL只是一种查询语言,而不是特定数据库产品的名称,并且日期/时间函数非常特定于供应商。请为使用postgresql、oracle、sql server、db2的数据库产品添加一个示例……您的问题相当模糊。我不知道日期的开始是什么?我不知道你想达到什么目的?请详细说明并作出适当解释。您可以使用一个示例和示例数据来更好地解释。此外,请指定您正在使用的DBMS
select d::date as date
from generate_series(current_date,
current_date - interval '1 year',
interval '-30 day') as t(d)