Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何提取范围内的日期?_Sql_Sql Server_Tsql_Date_Recursive Query - Fatal编程技术网

Sql 如何提取范围内的日期?

Sql 如何提取范围内的日期?,sql,sql-server,tsql,date,recursive-query,Sql,Sql Server,Tsql,Date,Recursive Query,我有一个SQL Server 2017表,其中包含日期范围内的数据 +---------+----------+------------+---------------+-------------+ | good_id | store_id | promo_name | date_id_begin | date_id_end | +---------+----------+------------+---------------+-------------+ | 1122 | 42

我有一个SQL Server 2017表,其中包含日期范围内的数据

+---------+----------+------------+---------------+-------------+
| good_id | store_id | promo_name | date_id_begin | date_id_end |
+---------+----------+------------+---------------+-------------+
| 1122    | 42       | promo_1    | 2020-02-01    | 2020-02-05  |
+---------+----------+------------+---------------+-------------+
| 2244    | 41       | promo_2    | 2020-03-01    | 2020-03-03  |
+---------+----------+------------+---------------+-------------+
我需要在这段时间内每天获取这些数据

+---------+----------+------------+---------------+
| good_id | store_id | promo_name | date_id_begin |
+---------+----------+------------+---------------+
| 1122    | 42       | promo_1    | 2020-02-01    |
+---------+----------+------------+---------------+
| 1122    | 42       | promo_1    | 2020-02-02    |
+---------+----------+------------+---------------+
| 1122    | 42       | promo_1    | 2020-02-03    |
+---------+----------+------------+---------------+
| 1122    | 42       | promo_1    | 2020-02-04    |
+---------+----------+------------+---------------+
| 1122    | 42       | promo_1    | 2020-02-05    |
+---------+----------+------------+---------------+
| 2244    | 41       | promo_2    | 2020-03-01    |
+---------+----------+------------+---------------+
| 2244    | 41       | promo_2    | 2020-03-02    |
+---------+----------+------------+---------------+
| 2244    | 41       | promo_2    | 2020-03-03    |
+---------+----------+------------+---------------+

我可以从循环中的某个范围提取日期,但如何选择其他信息good\u id、store\u id、promo\u name?

一个选项是递归查询:

with cte as (
    select good_id, store_id, promo_name, date_id_begin, date_id_end
    from mytable
    union all
    select good_id, store_id, promo_name, dateadd(day, 1, date_id_begin), date_id_end
    from cte 
    where date_id_begin < date_id_end
)
select good_id, store_id, promo_name, date_id_begin from cte

如果范围跨越100天以上,则需要在查询结束时添加选项Max_recursion 0。

如果没有日历或理货表,则可以使用临时理货表

范例

返回

good_id store_id    promo_name  Date
1122    42          promo_1     2020-02-01
1122    42          promo_1     2020-02-02
1122    42          promo_1     2020-02-03
1122    42          promo_1     2020-02-04
1122    42          promo_1     2020-02-05
2244    41          promo_2     2020-03-01
2244    41          promo_2     2020-03-02
2244    41          promo_2     2020-03-03

从表名中选择*
good_id store_id    promo_name  Date
1122    42          promo_1     2020-02-01
1122    42          promo_1     2020-02-02
1122    42          promo_1     2020-02-03
1122    42          promo_1     2020-02-04
1122    42          promo_1     2020-02-05
2244    41          promo_2     2020-03-01
2244    41          promo_2     2020-03-02
2244    41          promo_2     2020-03-03