MySQL에서 어제 날짜 선택
날짜가 어제인 값은 어떻게 표시하고 셀 수 있습니까?나는 사용했다time()
데이터베이스에 날짜를 삽입합니다.예:
URL: google.com youtube.com google.com youtube.com test.com youtube.com
DateVisited: 1313668492 1313668540 1313668571 13154314
테이블 내에 여러 개의 URL이 존재하는 수와 어제 방문한 URL의 수를 표시합니다.결과 예:
LINK | timesExisted | timesVisitedYesterday
Google.com | 2 | 2
youtube.com| 3 | 3
어제 날짜를 알 수 있는 것은 이미 알고 있습니다만, 어제 URL이 몇 번 존재했는지, 테이블에 URL이 몇 번 존재했는지에 대해서는 알 수 없습니다.
어제 날짜를 얻는 가장 간단하고 가장 좋은 방법은 subdate입니다.
subdate(current_date, 1)
질문은 다음과 같습니다.
SELECT
url as LINK,
count(*) as timesExisted,
sum(DateVisited between UNIX_TIMESTAMP(subdate(current_date, 1)) and
UNIX_TIMESTAMP(current_date)) as timesVisitedYesterday
FROM mytable
GROUP BY 1
궁금하신 분들을 위해서sum(condition)
조건을 만족시키는 행의 수를 알 수 있습니다.그렇지 않으면 번거롭고 말이 많은 행이 필요하게 됩니다.case
mysql 부울 값은 다음과 같습니다.1
정말 그리고0
그래서 조건을 합하면 그것이 얼마나 많은 수를 효과적으로 셀 수 있는지 알 수 있습니다.이 패턴을 사용하면 SQL 코드를 정리할 수 있습니다.
SELECT SUBDATE(NOW(),1);
여기서 now() 함수는 타임스탬프에서 시스템의 현재 날짜와 시간을 되돌립니다.
다음을 사용할 수 있습니다.
SELECT SUBDATE(CURDATE(),1)
다음을 사용할 수 있습니다.
SELECT SUBDATE(NOW(), 1);
또는
SELECT SUBDATE(NOW(), INTERVAL 1 DAY);
또는
SELECT NOW() - INTERVAL 1 DAY;
또는
SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);
마지막 날짜 또는 다음 날짜, 주, 월 및 년 계산.누구에게나 도움이 될 수 있어요.
현재 날짜:
select curdate();
어제:
select subdate(curdate(), 1)
내일:
select adddate(curdate(), 1)
최근 1주일:
select between subdate(curdate(), 7) and subdate(curdate(), 1)
다음 1주일:
between adddate(curdate(), 7) and adddate(curdate(), 1)
최근 1개월:
between subdate(curdate(), 30) and subdate(curdate(), 1)
향후 1개월:
between adddate(curdate(), 30) and adddate(curdate(), 1)
이번 달:
subdate(curdate(),day(curdate())-1) and last_day(curdate());
과거 1년간:
between subdate(curdate(), 365) and subdate(curdate(), 1)
향후 1년간:
between adddate(curdate(), 365) and adddate(curdate(), 1)
어제의 날짜를 알 수 있는 방법은 다음과 같습니다.CAST(NOW() - INTERVAL 1 DAY AS DATE)
다음과 같은 것이 동작할 수 있습니다.
SELECT * FROM your_table
WHERE DateVisited >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
AND DateVisited <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));
최근 몇 주 동안 쿼리:
SELECT *
FROM dual
WHERE search_date BETWEEN SUBDATE(CURDATE(), 7) AND CURDATE()
선택한 답변은 정확하고 간결하지만, 다른 답변에 기재되어 있는 구조를 주장합니다.
SELECT * FROM your_table
WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));
타임스탬프 없이 맨날짜만 필요한 경우 다음과 같이 쓸 수도 있습니다.
SELECT * FROM your_table
WHERE DateVisited >= CAST(NOW() - INTERVAL 1 DAY AS DATE)
AND DateVisited <= CAST(NOW() AS DATE);
사용하는 이유CAST
대SUBDATE
이CAST
는 ANSI SQL 구문입니다. SUBDATE
는 의 날짜 연산 컴포넌트의 MySQL 고유의 구현입니다.CAST
ANSI 구문을 사용하는 습관을 들이면 다른 데이터베이스로 이행해야 할 때 발생하는 문제를 줄일 수 있습니다.향후 다른 DBMS와 협력할 것이 거의 확실하기 때문에 전문적인 연습으로 습관을 들이는 것도 좋습니다.
주요 DBMS 시스템 중 ANSI를 완전히 준수하는 시스템은 없지만 대부분은 광범위한 ANSI 구문 집합을 구현하고 있으며 MySQL 및 그 하위 시스템(MariaDB, Percona 등) 이외의 시스템 중 거의 누구도 MySQL 고유의 구문을 구현하지 않습니다.
cdhowie에서 위의 답변 중 하나를 수정했습니다.이건 나한테 효과가 있는 것 같아.UNIX_TIMESTamp 함수를 사용하여 이 작업을 수행할 수도 있을 것 같습니다.
SELECT * FROM your_table
WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));
언급URL : https://stackoverflow.com/questions/7146828/mysql-selecting-yesterdays-date
'source' 카테고리의 다른 글
배열에서 처음 N개의 요소를 가져오는 방법 (0) | 2022.12.13 |
---|---|
uniqid는 얼마나 고유합니까? (0) | 2022.12.13 |
메이븐 빌드에서 junit 테스트를 병렬로 실행하고 있습니까? (0) | 2022.12.13 |
SQL 트리거에서 삽입에 열 값이 포함되어 있는지 확인합니다. (0) | 2022.12.13 |
초를 시간, 분, 초로 변환하려면 어떻게 해야 합니까? (0) | 2022.12.13 |