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

问题描述:

我需要列出给定(处方)开始日期和结束日期之间的所有日期 - (作为更大查询的一部分)。MySQL - 使用会话变量列出两个给定日期之间的所有日期

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; 

T1是一些表,一些记录。

要执行后的变量重置回:

SELECT @gg := NULL, @hh := NULL; 
+0

的可能的复制[如何获得MySQL中选择查询两个日期之间的日期列表](https://*.com/questions/9295616/how-to-get-list-of-dates-between -two-dates-in-mysql-select-query) – GurV

+0

谢谢你指点我的链接。我在看。除此之外,是否可以使用变量与上述查询具有相同的结果? –

+0

仍在挣扎?请参阅https://meta.*.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

我设法用变量来得到这个。

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);