2010-11-21 10 views
0

내 쿼리는 MySQL의 비 날짜 형식 필드에 날짜를 비교합니까 :는 어떻게 다음과 같이

select id, 
     date 
    from table 
where date < '1/31/2015' && date > '11/31/2011' 
+0

은'TABLE.date' 럼의 데이터 유형은 무엇입니까? CREATE TABLE 문은 사물을 분명히합니다. –

답변

3

날짜를 문자열로 입력하면 일부 형식이 암시 적으로/자동으로 비교되는 열의 적절한 데이터 형식으로 변환됩니다. IE : 날짜 시간에 문자열에서 날짜/시간 변환

SELECT t.id, 
     t.date 
    FROM TABLE t 
WHERE t.date < '2015-01-31' 
    AND t.date > '2011-11-31' 

가장 안전한 수단을 사용하는 것입니다 MySQL's STR_TO_DATE function :

WHERE t.date < STR_TO_DATE('1/31/2015', '%m/%d/%Y') 
    AND t.date > STR_TO_DATE('11/31/2011', '%m/%d/%Y') 
+0

'STR_TO_DATE'는 테이블의 모든 행에 대해 계산이 필요합니다. 색인은 쓸모 없으며 큰 데이터 세트에는 오랜 시간이 걸릴 것입니다. – ceejayoz

+0

@ceejayoz : 역으로 - 색인은 변환되는 문자열 값이 아니라 열입니다. 또한 문자열 값을 날짜로 변환하는 RBAR (행 고뇌 행)도 없습니다 ... –

+0

사용자의 날짜가 "1/31/2015"와 같은 문자열로 저장되는 경우 색인을 생성하면 많이 사용되지 않습니다 날짜별로 걸러 내기 위해'STR_TO_DATE '를 통해 각't.date' 값을 실행시켜 네이티브 형식으로 가져와야합니다. – ceejayoz

2

MySQL을 DATEDATETIME 필드는 형식 YYYY-MM-DD HH:MM:SS에 있습니다. 날짜를 처리하는 기본 제공 데이터 유형을 사용하지 않았다면 더 많은 문제가 발생할 것입니다.

+0

그 중, 문자열을 유효한 SQL 날짜로 변환하는 STR_TO_DATE 함수가 있음을 언급하고자합니다. –

2

첫째, & &은 SQL에서 "and"연산자가 아닙니다. AND를 사용하십시오.

둘째, MySQL 날짜는 항상 ISO-8601입니다. 표준을 읽거나 몇 가지 예를 살펴 보시기 바랍니다.

셋째, BETWEEN SQL 함수를 사용하여 범위의 값을 찾을 수 있습니다.

나는 초보자를위한, 교육 과정에 SQL을 이동)

가) MySQL의 문서를 몇 가지 예

그리고

c)를

B를 읽어 보시기 바랍니다.

+0

응답 해 주셔서 감사합니다.하지만 첫 번째 지점에서 잘못 생각한 것 같습니다. http://dev.mysql.com/doc/refman/5.0/en/logical-operators.html#operator_and 나는 BETWEEN과 다른 모든 날짜 함수를 가능하게하는 데이터 유형. 나는 longtext 유형을 사용하여이 날짜를 저장하므로 오히려 간단한 질문을합니다. 이제는 내가 알게 될 것 같아요. 훨씬 더 의미가 있습니다 - 나쁘다. – InnateDev