[SQL] 어떻게 현재 날짜의 소인이있는 행을 선택하려면?
SQL어떻게 현재 날짜의 소인이있는 행을 선택하려면?
나는 데이터베이스 테이블에서 오늘의 레코드를 선택하려합니다.
현재 내가 사용
SELECT * FROM `table` WHERE (`timestamp` > DATE_SUB(now(), INTERVAL 1 DAY));
그러나 이것은 지난 24 시간 동안 결과를 받아, 나는 그것은 단지 시간을 무시하고, 오늘부터 결과를 선택해야합니다. 어떻게 일 만에 따라 결과를 선택할 수 있습니까?
해결법
-
==============================
1.사용 날짜와 CURDATE ()
사용 날짜와 CURDATE ()
SELECT * FROM `table` WHERE DATE(`timestamp`) = CURDATE()
나는 DATE를 사용하는 것은 여전히 INDEX를 사용 같아요.
데모의 실행 계획을 참조
-
==============================
2.당신이 원하는 경우 인덱스가 사용되는 쿼리는 테이블 스캔을 할 수 없습니다 :
당신이 원하는 경우 인덱스가 사용되는 쿼리는 테이블 스캔을 할 수 없습니다 :
WHERE timestamp >= CURDATE() AND timestamp < CURDATE() + INTERVAL 1 DAY
이 실제 실행 계획을 만드는 차이를 보여주기 위해, 우리는 SQL-바이올린 (매우 도움이되는 사이트)를 테스트합니다 :
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') ;
이제 2 버전을 시도 할 수 있습니다.
DATE (타임 스탬프)와 버전 1 =?
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를 (반환 된 행이 몇 가지로 그 문제가되지 않습니다) 수행
타임 스탬프 <=와 버전이? 및 타임 스탬프
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
이 인덱스의 범위 스캔을 사용하고 테이블 만 대응 행을 판독한다.
-
==============================
3.
SELECT * FROM `table` WHERE timestamp >= CURDATE()
소용해야 'AND 소인
CURDATE 때문에 ()는 항상 현재 일 반환
MySQL의 CURDATE () 함수
-
==============================
4.얼마나 많은 방법 우리는이 고양이를 피부 할 수 있습니까? 여기에 또 다른 변종이다.
얼마나 많은 방법 우리는이 고양이를 피부 할 수 있습니까? 여기에 또 다른 변종이다.
테이블 SELECT * WHERE DATE (FROM_UNIXTIME (소인)) = '2015년 11월 18일';
-
==============================
5.단순히 날짜에 캐스팅 :
단순히 날짜에 캐스팅 :
SELECT * FROM `table` WHERE CAST(`timestamp` TO DATE) == CAST(NOW() TO DATE)
-
==============================
6.이것은 내 생각에 가장 쉬운 수 :
이것은 내 생각에 가장 쉬운 수 :
SELECT * FROM `table` WHERE `timestamp` like concat(CURDATE(),'%');
-
==============================
7.특정 날짜와 비교하려는 경우, 당신은 직접처럼 쓸 수 있습니다 :
특정 날짜와 비교하려는 경우, 당신은 직접처럼 쓸 수 있습니다 :
select * from `table_name` where timestamp >= '2018-07-07';
// 여기에 타임 스탬프는 타임 스탬프 형식을 갖는 열의 이름입니다
또는
오늘 날짜를 가져 오는 경우, CURDATE () 함수는 그렇게 볼 수 있습니다 :
select * from `table_name` where timestamp >= CURDATE();
-
==============================
8.아니면 같은 결과는 CURRENT_DATE 대안을 사용할 수 있습니다 :
아니면 같은 결과는 CURRENT_DATE 대안을 사용할 수 있습니다 :
SELECT * FROM yourtable WHERE created >= CURRENT_DATE
database.guide의 사례
-
==============================
9.사용하여 비주얼 스튜디오 2017에 내장 된 I 현재 주어진 솔루션에 대한 문제가 있었다 개발을위한 데이터베이스, 나는 DATE ()는 함수에 내장되지 않았 음 오류를 던졌다 때문에 작동하도록 코드를 변경했다.
사용하여 비주얼 스튜디오 2017에 내장 된 I 현재 주어진 솔루션에 대한 문제가 있었다 개발을위한 데이터베이스, 나는 DATE ()는 함수에 내장되지 않았 음 오류를 던졌다 때문에 작동하도록 코드를 변경했다.
여기 내 솔루션입니다 :
여기서, CAST (TimeCalled AS DATE) = (DATE AS GETDATE ()) CAST
from https://stackoverflow.com/questions/14769026/how-to-select-rows-that-have-current-days-timestamp by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 쿼리는 최소값과 별개의 행을 선택합니다 (0) | 2020.05.07 |
---|---|
[SQL] IF NOT SQLite는 존재 할 방법 (0) | 2020.05.07 |
[SQL] 어떤 시점에서 데이터베이스를 사용하여 가치가있다? (0) | 2020.05.07 |
[SQL] T-SQL 무작위 문자열을 생성 (0) | 2020.05.07 |
[SQL] SQL 서버 SELECT 마지막 N 행 (0) | 2020.05.07 |