두 날짜 사이의 모든 달에 대한 동적 테이블 생성
P粉663883862
2023-08-28 12:44:46
<p>내가 가진 모든 정보는 다음과 같습니다</p>
<테이블 클래스="s-테이블">
<머리>
<tr>
이름 |
<번째>INT_VALUE
<th>开始</th>
<일>END</일>
</tr>
</머리>
<본문>
<tr>
<td>일신</td>
100 |
<td>2013-11-16</td>
<td>2014-11-16</td>
</tr>
</tbody>
</테이블>
<p>目标是输如下:</p>
<테이블 클래스="s-테이블">
<머리>
<tr>
<th>이름</th>
<번째>INT_VALUE
<th>开始</th>
<일>END</일>
<일>间隔</일>
</tr>
</머리>
<본문>
<tr>
<td>일신</td>
100 |
<td>2013-11-16</td>
<td>2014-11-16</td>
2013년 11월 11일 |
</tr>
<tr>
<td>일신</td>
100 |
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>2013년 12월</td>
</tr>
<tr>
<td>일신</td>
100 |
<td>2013-11-16</td>
<td>2014-11-16</td>
2014년 1월 |
</tr>
<tr>
<td>일신</td>
100 |
<td>2013-11-16</td>
<td>2014-11-16</td>
<td>2014년 2월</td>
</tr>
</tbody>
</테이블>
<p>저희는 이 앱을 사용하는 데 동의하지 않습니다. START와 END가 일치하지 않는 사용 방식입니다.</p>
<pre class="brush:php;toolbar:false;">SELECT START, 달력, 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 캘린더
FROM TABLE(GENERATOR(행 개수=>80)))
ON t1.START = 달력
1, 2로 그룹화
2, 1로 주문하세요
;</pre>
<p>这里的目标是将int值与范围开始到结束の间的每个月份关联起来。</p>
이동
数字范围
자체 CTE로 이동하여 이제 80개 숫자(아마도 더 클 수 있음)의 큰 목록을 갖게 되었습니다.그런 다음 시작/끝 사이의 개월 수를 찾아 같은 수의 행에 조인합니다. 그런 다음 수학을 수행하여 범위를 선택 항목으로 변환합니다.
으아악또 다른 옵션은 장기 날짜 테이블을 만드는 것입니다
으아악그런 다음 BETWEEN을 사용하여 (시작, 끝) 범위에 포함된 값을 가져오며 이는 다음과 같습니다.
으아악으아악
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bdd028a7755fdcb8296df2301baeb295
월 앞에 0이 표시되는 것을 원하지 않으면
'%c-%Y'
패턴을 사용하세요.