오늘의 타임 스탬프가있는 행을 선택하는 방법은 무엇입니까?
데이터베이스 테이블에서 오늘의 레코드 만 선택하려고합니다.
현재 나는
SELECT * FROM `table` WHERE (`timestamp` > DATE_SUB(now(), INTERVAL 1 DAY));
그러나 이것은 지난 24 시간 동안의 결과를 필요로하며 시간을 무시하고 오늘의 결과 만 선택하는 데 필요합니다. 날짜만을 기준으로 결과를 선택하려면 어떻게해야합니까?
사용 DATE
및CURDATE()
SELECT * FROM `table` WHERE DATE(`timestamp`) = CURDATE()
내가 추측 사용하여 DATE
여전히 INDEX를 사용합니다 .
인덱스를 사용하고 쿼리가 테이블 스캔을 수행하지 않도록하려는 경우 :
WHERE timestamp >= CURDATE()
AND timestamp < CURDATE() + INTERVAL 1 DAY
이것이 실제 실행 계획에 미치는 차이를 보여주기 위해 SQL-Fiddle (매우 유용한 사이트)을 사용하여 테스트합니다 .
CREATE TABLE test --- simple table
( id INT NOT NULL AUTO_INCREMENT
,`timestamp` datetime --- index timestamp
, data VARCHAR(100) NOT NULL
DEFAULT 'Sample data'
, PRIMARY KEY (id)
, INDEX t_IX (`timestamp`, id)
) ;
INSERT INTO test
(`timestamp`)
VALUES
('2013-02-08 00:01:12'),
--- --- insert about 7k rows
('2013-02-08 20:01:12') ;
지금 두 가지 버전을 사용해 보겠습니다.
버전 1 DATE(timestamp) = ?
EXPLAIN
SELECT * FROM test
WHERE DATE(timestamp) = CURDATE() --- using DATE(timestamp)
ORDER BY timestamp ;
설명:
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF
1 SIMPLE test ALL
ROWS FILTERED EXTRA
6671 100 Using where; Using filesort
그것은 모든 (6671) 행을 필터링 한 후 filesort를 (반환 된 행이 몇 가지로 그 문제가되지 않습니다) 수행
버전 2 timestamp <= ? AND timestamp < ?
EXPLAIN
SELECT * FROM test
WHERE timestamp >= CURDATE()
AND timestamp < CURDATE() + INTERVAL 1 DAY
ORDER BY timestamp ;
설명:
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF
1 SIMPLE test range t_IX t_IX 9
ROWS FILTERED EXTRA
2 100 Using where
그것은 사용하는 인덱스의 범위를 스캔 한 다음 테이블 만 대응 행을 판독한다.
SELECT * FROM `table` WHERE timestamp >= CURDATE()
더 짧고 'AND timestamp <CURDATE () + INTERVAL 1 DAY'를 사용할 필요가 없습니다.
CURDATE ()는 항상 현재 날짜를 반환하기 때문입니다.
이 고양이를 얼마나 많은 방법으로 피부를 벗길 수 있습니까? 여기에 또 다른 변형이 있습니다.
SELECT * FROM table
WHERE DATE (FROM_UNIXTIME ( timestamp
)) = '2015-11-18';
간단히 날짜로 캐스트하십시오.
SELECT * FROM `table` WHERE CAST(`timestamp` TO DATE) == CAST(NOW() TO DATE)
이것은 내 의견으로는 가장 쉬울 수 있습니다.
SELECT * FROM `table` WHERE `timestamp` like concat(CURDATE(),'%');
On Visual Studio 2017, using the built-in database for development I had problems with the current given solution, I had to change the code to make it work because it threw the error that DATE() was not a built in function.
Here is my solution:
where CAST(TimeCalled AS DATE) = CAST(GETDATE() AS DATE)
If you want to compare with a particular date , You can directly write it like :
select * from `table_name` where timestamp >= '2018-07-07';
// here the timestamp is the name of the column having type as timestamp
or
For fetching today date , CURDATE() function is available , so :
select * from `table_name` where timestamp >= CURDATE();
참고URL : https://stackoverflow.com/questions/14769026/how-to-select-rows-that-have-current-days-timestamp
'Programing' 카테고리의 다른 글
Android에서 사용자 비활성을 감지하는 방법 (0) | 2020.08.31 |
---|---|
프록시 뒤의 NuGet (0) | 2020.08.31 |
모의 프레임 워크 대 MS Fakes 프레임 워크 (0) | 2020.08.31 |
프로그래밍 방식으로 UINavigationController에서 UINavigationBar의 사용자 지정 하위 클래스 설정 (0) | 2020.08.31 |
SCP 또는 SSH를 사용하여 Python의 원격 서버에 파일을 복사하는 방법은 무엇입니까? (0) | 2020.08.31 |