sql - SQL列出两个日期之间的重复日期,结束日期为下一个开始日期
问题描述
我的问题与此类似 Get a list of dates between two dates using a function
重复使用此代码 10 天:
Declare @startDate datetime
Declare @endDate datetime
set @startDate= '03/01/2019 12:00:00'
set @endDate = '04/30/2019 12:00:00'
;WITH mycte AS
(
SELECT CAST(@startDate AS DATETIME) DateValue
UNION ALL
SELECT DateValue + 10
FROM mycte
WHERE DateValue + 10 < @endDate - 1
)
SELECT DateValue
FROM mycte
OPTION (MAXRECURSION 0)
我得到 ff 结果:
2019-03-20 12:00:00.000
2019-03-30 12:00:00.000
2019-04-09 12:00:00.000
2019-04-19 12:00:00.000
但我希望结果是:
2019-03-20 12:00:00.000
2019-03-30 12:00:00.000
2019-03-31 12:00:00.000
2019-04-09 12:00:00.000
2019-04-10 12:00:00.000
2019-04-20 12:00:00.000
2019-04-21 12:00:00.000
2019-04-30 12:00:00.000
这可以用 SQL 实现吗?
解决方案
我发现这个问题相当神秘,但这似乎可以满足您的要求:
set @startDate= '2019-03-10 12:00:00';
set @endDate = '2019-04-30 12:00:00';
WITH mycte AS (
SELECT CAST(@startDate AS DATETIME) as DateValue
UNION ALL
SELECT CONVERT(DATETIME, EOMONTH(DateValue)) + CONVERT(DATETIME, CONVERT(TIME, DateValue))
FROM mycte
WHERE MONTH(DateValue + 10) <> MONTH(DateValue) AND
CONVERT(DATE, DATEVALUE) <> CONVERT(DATE, EOMONTH(DateValue)) AND
DateValue < @endDate
UNION ALL
SELECT DateValue + 10
FROM mycte
WHERE DateValue + 10 < @endDate
)
SELECT DISTINCT DateValue
FROM mycte
ORDER BY DateValue
OPTION (MAXRECURSION 0);
这是一个 db<>fiddle。
推荐阅读
- python - 递归回溯没有返回值python
- linux - 两台 linux 服务器访问同一个驱动器。文件可见性问题
- python - (builtins.TypeError) SQLite Time 类型只接受 Python 时间对象作为输入
- oracle - Oracle Database 19c 不可用 tnsnames.ora 文件
- flutter - AlertDialog barrierDismissable 不起作用?
- python - DASH 中的后台处理
- apache-kafka-streams - Kafka Streams - 不可预测的聚合结果
- docker - 使用 Terraform 设置 Docker 容器和网络
- javascript - 带有 vuejs 的“ts 1109”
- python - 如何根据平均值、中位数、第 1 和第 9 个十分位值生成数据集?