MySQL에서 타임스탬프 날짜를 날짜 전용 매개 변수와 비교하는 방법
SQL 문에서는 TIMESTAMP로 저장된 날짜와 YYY-MM-DD 형식의 날짜를 비교하려면 어떻게 해야 합니까?
예:SELECT * FROM table WHERE timestamp = '2012-05-25'
이 쿼리는 지정된 날짜에 타임스탬프가 있는 모든 행을 반환하지만 자정 타임스탬프가 있는 행만 반환합니다.
감사해요.
를 사용할 수 있습니다.DATE()
타임스탬프의 날짜 부분을 추출하는 함수:
SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-25'
단, 타임스탬프 컬럼에 인덱스가 있는 경우 타임스탬프 컬럼의 인덱스를 이용할 수 있기 때문에 다음과 같은 작업이 더 빠릅니다.
SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-25 00:00:00' AND '2012-05-25 23:59:59'
WHERE cast(timestamp as date) = '2012-05-05'
일부에서 제안하는 바와 같이DATE(timestamp)
열에 조작을 적용하므로 지수 순서에 의존할 수 없습니다.
단,BETWEEN
밀리초를 포함할 경우에만 신뢰성이 높아집니다.이 예에서는 타임스탬프BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
타임 스탬프가 있는 레코드를 제외합니다.2012-05-05 23:59:59.001
그리고.2012-05-05 23:59:59.999
그러나, 이 방법에서도 데이터 타입의 정밀도 때문에 문제가 있습니다.경우에 따라서는 999밀리초가 반올림됩니다.
가장 좋은 방법은 다음과 같습니다.
SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00'
AND timestamp <= '2012-05-05 23:59:59'
MYSQL 변환 함수를 사용합니다.
SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05'
이거면 될 것 같아
이것을 조사하면서, BETWEN 솔루션을 수정해, 특정의 비정적/문자열 날짜의 예를 나타내면 좋겠다고 생각했습니다만, 오히려 가변적인 날짜, 또는 오늘의 예를 들면 다음과 같습니다.CURRENT_DATE()
log_timestamp 열의 인덱스를 사용합니다.
SELECT *
FROM some_table
WHERE
log_timestamp
BETWEEN
timestamp(CURRENT_DATE())
AND # Adds 23.9999999 HRS of seconds to the current date
timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL '86399.999999' SECOND_MICROSECOND));
다음날 오전 12시 케이스를 피하기 위해 초/마이크로초를 실행했습니다.다만, 비교 연산자를 개입시켜 「INTERVAL 「1 DAY」를 실행해, 보다 읽기 쉬운 비BEWN 어프로치를 실시할 수도 있습니다.
SELECT *
FROM some_table
WHERE
log_timestamp >= timestamp(CURRENT_DATE()) AND
log_timestamp < timestamp(DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY));
이 두 가지 접근법 모두 지수를 사용하며 훨씬 더 빨리 수행되어야 한다.둘 다 똑같이 빠른 것 같다.
SQL 파라미터를 사용하여 쿼리를 실행하는 경우 도움이 됩니다.
SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')
당신의 질문을 읽었을 때 MySQL이라는 태그를 보기 전까지는 Oracle DB에 있는 줄 알았어요.어쨌든 Oracle을 사용하는 사용자는 다음과 같은 방법을 사용할 수 있습니다.
SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');
사용하다
SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05'
SELECT * FROM table WHERE DATE(timestamp) = '2012-05-25'
DATE 함수로 인해 "시간 스탬프" 열에 인덱스가 있으면 작동하지 않습니다. 아래 쿼리는 인덱스를 사용하여 더 나은 성능을 제공합니다.
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00'
AND timestamp <= '2012-05-05 23:59:59'
또는
SELECT * FROM table
WHERE timestamp >= '2012-05-05' AND timestamp < '2012-05-06'
통계 확인을 위해 이러한 작업을 실행해 보십시오.
explain SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-25'
explain SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00'
AND timestamp <= '2012-05-05 23:59:59'
여길 떠나게 해줘 nodejs와 expressjs에서 온 사람들에게 도움이 될 수도 있어
getDailyIssueOperations(dateName, date, status) {
const queryText = `
select count(*) as total from issues
where date(${dateName})='${date}' and status='${status}';
`;
},
날짜 및 열 이름이 변수인 경우 구현이 유용함을 확인하십시오.
언급URL : https://stackoverflow.com/questions/10483123/how-to-compare-timestamp-dates-with-date-only-parameter-in-mysql
'itsource' 카테고리의 다른 글
폴더가 있는지 확인하는 방법 (0) | 2022.11.04 |
---|---|
JetBrains 웹IDE: PHP 변수 유형 힌트입니까? (0) | 2022.11.04 |
조직에 속한 모든 사용자를 가져오기 위한 MySQL 쿼리 (0) | 2022.11.04 |
Maven은 npm과 비슷한가요? (0) | 2022.10.26 |
Maria용 Automysql 백업 구성DB (0) | 2022.10.26 |