MySQL 날짜 범위에서 누락된 날짜를 채우는 방법은 무엇입니까?
Jan 23, 2025 pm 05:02 PMMySQL의 날짜 범위에서 누락된 날짜 채우기
어떤 경우에는 날짜 범위 내에서 날짜가 누락된 표가 나타날 수 있습니다. 이로 인해 데이터 분석 및 플로팅 프로세스가 중단될 수 있습니다. 이러한 격차를 해소하기 위해 MySQL은 누락된 날짜를 지정된 숫자 값으로 채우는 솔루션을 제공합니다.
특정 날짜와 관련된 점수를 기록하는 테이블의 예를 살펴보겠습니다. 일부 날짜가 생략된 경우 우리의 목표는 자리 표시자 값(예: 0)으로 날짜를 완성하여 연속 범위를 얻는 것입니다.
도전 과제
MySQL에는 기본 재귀 기능이 없지만 NUMBERS 테이블 트릭을 사용하여 자동 증가 열을 기반으로 날짜 시퀀스를 생성할 수 있습니다.
날짜 순서 생성
- NUMBERS 테이블 만들기:
DROP TABLE IF EXISTS `numbers`; CREATE TABLE `numbers` ( `id` int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
- 표 채우기:
INSERT INTO `numbers` ( `id` ) VALUES ( NULL ); -- 添加足够多的空行以覆盖所需的日期范围
이렇게 하면 날짜 범위에 필요한 만큼의 행이 생성됩니다. (참고: 삽입되는 행 수는 날짜 범위에 따라 조정되어야 합니다. NULL
을 삽입하는 것만으로는 충분한 행을 자동으로 생성할 수 없습니다.)
- 구성 날짜 순서:
SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14';
날짜 '2010-06-06' 및 '2010-06-14'를 YYYY-MM-DD 형식의 원하는 시작 및 종료 날짜로 바꿉니다.
누락된 날짜를 입력하세요
- LEFT JOIN 만들기:
SELECT `x`.`timestamp` AS `timestamp`, COALESCE(`y`.`score`, 0) AS `cnt` FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%Y-%m-%d') AS `timestamp` FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x LEFT JOIN `y` ON STR_TO_DATE(`y`.`date`, '%Y-%m-%d') = `x`.`timestamp`;
y
을 실제 데이터 테이블로 바꾸고 이에 따라 날짜 형식을 조정하세요. (형식 변환으로 인한 문제를 방지하기 위해 통일된 YYYY-MM-DD
형식 사용을 권장합니다.)
이 쿼리를 실행하면 지정된 범위의 전체 날짜 집합을 얻을 수 있으며 누락된 값은 지정된 0 값으로 채워집니다. (참고: numbers
전체 기간을 포함하려면 표에 충분한 행이 미리 채워져 있어야 합니다.)
위 내용은 MySQL 날짜 범위에서 누락된 날짜를 채우는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Alter Table 문을 사용하여 MySQL에서 테이블을 어떻게 변경합니까?

MySQL의 문제를 해결하는 방법 공유 라이브러리를 열 수 없습니다.

Linux에서 MySQL을 실행합니다 (Phpmyadmin이있는 Podman 컨테이너가 포함되지 않음)

일반적인 취약점 (SQL 주입, 무차별 적 공격)에 대해 MySQL을 어떻게 보호합니까?
