doris中sql生成连续日期(年 月)
时间: 2023-10-07 17:08:35 浏览: 589
DorisDB 目前不支持 `generate_series` 函数,但是你可以使用其他方法来生成连续日期。
如果你想要生成一段时间内的所有月份,你可以使用 `DATE_FORMAT` 函数来格式化日期,然后使用 `BETWEEN` 运算符来筛选:
```sql
SELECT DISTINCT DATE_FORMAT(date_column, '%Y-%m') AS month
FROM table_name
WHERE date_column BETWEEN '2020-01-01' AND '2021-12-31'
ORDER BY month;
```
这个查询会返回从 2020 年 1 月到 2021 年 12 月的所有月份列表。
如果你想要生成一段时间内的所有年份,你可以使用 `YEAR` 函数来提取年份,然后使用 `BETWEEN` 运算符来筛选:
```sql
SELECT DISTINCT YEAR(date_column) AS year
FROM table_name
WHERE date_column BETWEEN '2010-01-01' AND '2021-12-31'
ORDER BY year;
```
这个查询会返回从 2010 年到 2021 年的所有年份列表。
相关问题
doris中sql生成连续日期(年 月)不需要建表
DorisDB 中可以使用 `WITH` 子句来生成一个虚拟的日期表,然后通过 `JOIN` 操作将其与其他表关联。以下是一个生成指定年份内所有月份的查询示例:
```sql
WITH RECURSIVE months(dt) AS (
SELECT CAST('2022-01-01' AS DATE)
UNION ALL
SELECT ADDDATE(dt, INTERVAL 1 MONTH)
FROM months
WHERE dt < '2022-12-01'
)
SELECT DATE_FORMAT(dt, '%Y-%m') AS month
FROM months;
```
这个查询使用递归方式生成一个包含指定年份内所有月份的日期表,然后使用 `DATE_FORMAT` 函数将日期格式化为 `yyyy-MM` 的形式,从而生成所需的连续日期。你可以根据需要修改起始日期和结束日期来生成不同的日期范围。
类似地,你也可以使用类似的方式生成所有年份:
```sql
WITH RECURSIVE years(dt) AS (
SELECT CAST('2010-01-01' AS DATE)
UNION ALL
SELECT ADDDATE(dt, INTERVAL 1 YEAR)
FROM years
WHERE dt < '2021-01-01'
)
SELECT YEAR(dt) AS year
FROM years;
```
这个查询使用递归方式生成一个包含指定年份内所有年份的日期表,然后使用 `YEAR` 函数提取年份,从而生成所需的连续年份。
doris sql 当前日期的去年一月一日
要获取当前日期的去年一月一日,你可以使用以下 SQL 查询:
```sql
SELECT DATEADD(year, -1, DATEADD(month, MONTH(GETDATE()) - 1, DATEADD(day, 1 - DAY(GETDATE()), GETDATE()))) AS LastYearJanuaryFirst
```
这将返回当前日期的去年一月一日。同样地,这是针对 SQL Server 数据库的查询,如果你使用的是其他数据库,可能需要适当调整语法。
阅读全文