Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
MySQL-使用会话变量列出两个给定日期之间的所有日期_Mysql_Date_Variables_Inner Join - Fatal编程技术网

MySQL-使用会话变量列出两个给定日期之间的所有日期

MySQL-使用会话变量列出两个给定日期之间的所有日期,mysql,date,variables,inner-join,Mysql,Date,Variables,Inner Join,我需要列出给定处方开始日期和结束日期之间的所有日期,作为更大查询的一部分 Table name: patientprescription Start date field: prescriptionstartdate End date field: prescriptionenddate 我正在尝试使用会话变量。但是我发现很难在变量中设置初始值。第一次执行不会产生任何值,但后续执行会给出正确的结果,因为第一次执行会设置变量 为了简化我的需求,以下是我查询的要点: SELECT @gg

我需要列出给定处方开始日期和结束日期之间的所有日期,作为更大查询的一部分

Table name: patientprescription
Start date field: prescriptionstartdate
End date field: prescriptionenddate
我正在尝试使用会话变量。但是我发现很难在变量中设置初始值。第一次执行不会产生任何值,但后续执行会给出正确的结果,因为第一次执行会设置变量

为了简化我的需求,以下是我查询的要点:

SELECT
    @gg := DATE_ADD ( @gg, INTERVAL 1 DAY ) AS rxDate
FROM patientprescription AS rx
    JOIN ( SELECT @gg := @hh FROM t1 ) AS v1 ON @hh := rx.prescriptionstartdate
WHERE
    rx.id = 8
    AND @gg <= rx.prescriptionenddate;

我设法用变量得到了这个

SELECT
    @gg := DATE( DATE_ADD (rx.prescriptionstartdate, INTERVAL @hh DAY) ) rxDateNext,
    @hh := @hh + 1 AS adderStmt
FROM patientprescription rx
    JOIN (SELECT @hh := 0 FROM t1) AS v1
WHERE 
    rx.id = 8
    AND @hh <= DATEDIFF(rx.prescriptionenddate, rx.prescriptionstartdate);

可能重复的感谢你给我指的链接。我正在看。除此之外,使用变量的上述查询是否有可能得到相同的结果?仍然很困难?我不明白为什么我的问题被否决了?我想要一个使用变量的解决方案,我觉得这个变量比在上面的文章中建议的遍历一个大的数字列表更有效。我认为这不是一个重复的问题。
SELECT
    @gg := DATE( DATE_ADD (rx.prescriptionstartdate, INTERVAL @hh DAY) ) rxDateNext,
    @hh := @hh + 1 AS adderStmt
FROM patientprescription rx
    JOIN (SELECT @hh := 0 FROM t1) AS v1
WHERE 
    rx.id = 8
    AND @hh <= DATEDIFF(rx.prescriptionenddate, rx.prescriptionstartdate);