MySQL Select last 7days
여기서 몇 개의 투고를 읽었는데, 특별한 것은 아닌 것 같습니다만, 최근 며칠간의 엔트리를 선택할 수 없습니다.
SELECT
p1.kArtikel,
p1.cName,
p1.cKurzBeschreibung,
p1.dLetzteAktualisierung,
p1.dErstellt,
p1.cSeo,
p2.kartikelpict,
p2.nNr,
p2.cPfad
FROM
tartikel AS p1 WHERE DATE(dErstellt) > (NOW() - INTERVAL 7 DAY)
INNER JOIN
tartikelpict AS p2
ON (p1.kArtikel = p2.kArtikel) WHERE (p2.nNr = 1)
ORDER BY
p1.kArtikel DESC
LIMIT
100;', $connection);
오늘과 지난 7일 사이에 를 추가하면 코드는 아무것도 출력하지 않습니다.
WHERE
구가 잘못되었으므로 테이블 참조 및 JOIN 조작을 따라야 합니다.
다음과 같은 경우:
FROM tartikel p1
JOIN tartikelpict p2
ON p1.kArtikel = p2.kArtikel
AND p2.nNr = 1
WHERE p1.dErstellt >= DATE(NOW() - INTERVAL 7 DAY)
ORDER BY p1.kArtikel DESC
편집(3년 이상 후)
위의 내용은 기본적으로 "WHERE 절을 쿼리에 추가하려고 했는데 쿼리가 오류를 반환하고 있습니다. 어떻게 수정해야 합니까?"라는 질문에 대한 답변입니다.
'최근 7일'의 날짜 범위를 확인하는 조건 작성에 대한 질문입니다만...
이는 사양 해석, 테이블 내 열의 데이터 유형(DATE 또는 DATETIME) 및 사용 가능한 데이터에 따라 달라집니다.반환해야 할 것.
요약: 일반적인 접근법은 날짜/시간 범위의 "시작"과 해당 범위의 "끝"을 식별하고 쿼리에서 참조하는 것입니다.좀 더 쉬운 걸 생각해 봅시다모든 행이 "syslog"로 표시됩니다.
열이 DATE 유형인 경우.쿼리에 식을 포함하기 전에 간단한 SELECT로 테스트할 수 있습니다.
SELECT DATE(NOW()) + INTERVAL -1 DAY
반환된 결과가 우리가 예상한 것임을 확인합니다.그런 다음 WHERE 절에서 동일한 식을 사용하여 다음과 같은 DATE 열과 비교할 수 있습니다.
WHERE datecol = DATE(NOW()) + INTERVAL -1 DAY
에는 DATETIME TIMESTAMP 를 사용할 수 .>=
★★★★★★★★★★★★★★★★★」<
를 지정하기 위한 부등식
WHERE datetimecol >= DATE(NOW()) + INTERVAL -1 DAY
AND datetimecol < DATE(NOW()) + INTERVAL 0 DAY
'최근 7일'은 이 시점부터 7일 전을 의미하는지 여부를 알아야 합니다.예를 들어 지난 7*24시간 동안 비교한 시간 구성요소를 포함하여 다음과 같습니다.
WHERE datetimecol >= NOW() + INTERVAL -7 DAY
AND datetimecol < NOW() + INTERVAL 0 DAY
오늘을 제외하고 지난 7일 동안
WHERE datetimecol >= DATE(NOW()) + INTERVAL -7 DAY
AND datetimecol < DATE(NOW()) + INTERVAL 0 DAY
6일이나 지났을 수도 있고 오늘까지...
WHERE datetimecol >= DATE(NOW()) + INTERVAL -6 DAY
AND datetimecol < NOW() + INTERVAL 0 DAY
SELECT 문 오른쪽 식을 테스트하는 것을 추천합니다.NOW() 대신 사용자 정의 변수를 사용하여 NOW()가 반환하는 값에 얽매이지 않고 주/월/년 경계 등을 테스트할 수 있습니다.
SET @clock = '2017-11-17 11:47:47' ;
SELECT DATE(@clock)
, DATE(@clock) + INTERVAL -7 DAY
, @clock + INTERVAL -6 DAY
특정 사용 사례에 대해 "시작" 및 "종료"에 해당하는 값을 반환하는 식이 있으면 WHERE 절의 범위 비교에서 이러한 식을 사용할 수 있습니다.
(개발자에 따라서는DATE_ADD
그리고.DATE_SUB
의 기능을 대신하다+ INTERVAL val DAY/HOUR/MINUTE/MONTH/YEAR
구문을 사용합니다.
MySQL은 DATE, DATETIME 및 TIMESTAMP 데이터 타입을 사용하기 위한 편리한 기능을 제공합니다.날짜, LAST_Day,
일부 개발자는 시작과 끝을 다른 코드로 계산하고 SQL 쿼리에 문자열 리터럴을 제공하여 데이터베이스에 제출된 쿼리가 다음과 같이 되도록 합니다.
WHERE datetimecol >= '2017-11-10 00:00'
AND datetimecol < '2017-11-17 00:00'
그리고 그 접근법도 효과가 있습니다.(CAST, CONVERT 또는 + INTERVAL 트릭을 사용하여 이러한 문자열 리터럴을 DATETIME에 명시적으로 캐스트하는 것이 좋습니다.
WHERE datetimecol >= '2017-11-10 00:00' + INTERVAL 0 SECOND
AND datetimecol < '2017-11-17 00:00' + INTERVAL 0 SECOND
위의 모든 것은 적절한 DATEY, DATETIME 및/또는 TIMESTAMP 데이터 타입으로 "날짜"를 저장하고 다양한 형식의 문자열로 저장하지 않는 것을 전제로 하고 있습니다.'dd/mm/yyyy'
,m/d/yyyy
, julian dates, 또는 산발적으로 비문자의 형식으로, 또는 에폭의 개시로부터 초수만큼, 이 대답은 훨씬 더 길어질 필요가 있습니다.
INSER JOIN을 사용하고 있기 때문에 WHERE 절에 다음과 같이 조건을 넣을 수 있습니다.
SELECT
p1.kArtikel,
p1.cName,
p1.cKurzBeschreibung,
p1.dLetzteAktualisierung,
p1.dErstellt,
p1.cSeo,
p2.kartikelpict,
p2.nNr,
p2.cPfad
FROM
tartikel AS p1 INNER JOIN tartikelpict AS p2
ON p1.kArtikel = p2.kArtikel
WHERE
DATE(dErstellt) > (NOW() - INTERVAL 7 DAY)
AND p2.nNr = 1
ORDER BY
p1.kArtikel DESC
LIMIT
100;
언급URL : https://stackoverflow.com/questions/24272335/mysql-select-last-7-days
'programing' 카테고리의 다른 글
삭제 또는 백스페이스 키가 @input 이벤트를 트리거하지 않도록 합니다. (0) | 2022.10.31 |
---|---|
셸 스크립트를 통한 echo 명령어로 mysql_secure_install 자동화 (0) | 2022.10.31 |
virtualenv와 함께 다른 Python 버전 사용 (0) | 2022.10.31 |
Scala의 Java 컬렉션에서 반복 (0) | 2022.10.31 |
모든 데이터를 vuex 상태로 저장해야 합니까? (0) | 2022.10.31 |