產生兩個日期之間的所有月份的動態表格
P粉663883862
2023-08-28 12:44:46
<p>我有一個如下所示的表格:</p>
<table class="s-table">
<thead>
<tr>
<th>姓名</th>
<th>INT_VALUE</th>
<th>開始</th>
<th>END</th>
</tr>
</thead>
<tbody>
<tr>
<td>一</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
</tr>
</tbody>
</table>
<p>目標是輸出如下:</p>
<table class="s-table">
<thead>
<tr>
<th>姓名</th>
<th>INT_VALUE</th>
<th>開始</th>
<th>END</th>
<th>間隔</th>
</tr>
</thead>
<tbody>
<tr>
<td>一</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>11-2013</td>
</tr>
<tr>
<td>一</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>2013年12月</td>
</tr>
<tr>
<td>一</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>1-2014</td>
</tr>
<tr>
<td>一</td>
<td>100</td>
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>2014年2月</td>
</tr>
</tbody>
</table>
<p>我已經開始使用這個。但是我不確定如何使用表中的START和END日期來確定計算之間的月份清單的開始和結束。 </p>
<pre class="brush:php;toolbar:false;">SELECT START, calendar, COUNT(1)
FROM table1 AS t1
RIGHT JOIN (SELECT row_number() OVER (ORDER BY SEQ4()) AS MONTHS
, TO_DATE(DATEADD(MONTH, MONTHS, '2019-05-01')) AS calendar
FROM TABLE(GENERATOR(rowcount=>80)))
ON t1.START = calendar
GROUP BY 1, 2
ORDER BY 2, 1
;</pre>
<p>這裡的目標是將int值與範圍開始到結束之間的每個月份關聯起來。 </p>
將
數字範圍
移至自己的CTE中以分離事物,我們現在有一個包含80個數字的大列表(可能更大)。然後我們找到開始/結束之間的月數,並連接相同數量的行。然後進行數學計算,將範圍轉換為選擇部分:
另一個選擇是建立一個長時間範圍的日期表
然後我們使用BETWEEN來取得(開始,結束)範圍內的包含值,變成:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bdd028a7755fdcb8296df2301baeb295
如果您不需要月份前導零,請使用
'%c-%Y'
模式。