source

MySQL에서 어제 날짜 선택

manysource 2022. 12. 13. 20:09

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)조건을 만족시키는 행의 를 알 수 있습니다.그렇지 않으면 번거롭고 말이 많은 행이 필요하게 됩니다.casemysql 부울 값은 다음과 같습니다.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);

사용하는 이유CASTSUBDATECAST는 ANSI SQL 구문입니다. SUBDATE는 의 날짜 연산 컴포넌트의 MySQL 고유의 구현입니다.CASTANSI 구문을 사용하는 습관을 들이면 다른 데이터베이스로 이행해야 할 때 발생하는 문제를 줄일 수 있습니다.향후 다른 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