SQL에서 날짜를 비교하는 방법은 무엇입니까?

데이터베이스 테이블에서 날짜 속성을 만들었지 만 그 유형을 varchar로 설정했습니다. Date 내 질문은 : SQL 쿼리에서 이러한 날짜를 계속 비교할 수 있습니까?

DB의 날짜는 다음 형식으로 저장됩니다.

dd / mm / yyyy hh : mm : ss

다음과 같은 PHP에서 SQL 쿼리를 수행해야합니다.

SELECT * FROM DBtable WHERE DBname="$name" AND date>="31/01/2015" AND date<="31/09/2015"; 

“date”는 다음과 같습니다. 07/08/2015 15:15:02

이를 수행합니다.

댓글

  • 수정 질문에 태그 를 지정하여 사용중인 데이터베이스 제품 (예 : MySQL 및 버전)을 알려주세요. 또한 날짜를 문자열보다 dates로 저장하는 것이 항상 훨씬 낫기 때문에 지금 테이블 정의를 변경할 수없는 이유가 있습니까? 아니면 도움을 요청하고 있습니까?
  • 날짜 속성을 datetime으로 변경할 수 있습니까? 날짜를 varchar로 저장하는 것은 문제가 있습니다. 유효한 날짜가 아닌 데이터가 저장되는 상황이 발생합니다. 또한 datetime간에 지속적으로 변환됩니다.

답변

사용중인 데이터베이스에 따라 문자열을 날짜로 변환 한 다음 비교를 수행 할 수 있어야합니다.

ie Sql Server에서

cast(date as datetime) >= "20150131" ... 

즉, 가능하면 일반적으로 날짜를 날짜로 저장하는 것이 좋습니다. 문자열을 사용해야하는 경우 보다 표준화 된 형식을 사용하는 것이 가장 좋습니다.

ie 예를 들어 쉽게 혼합 할 수있는 "mm/dd/YYYY" 대신 "YYYY-mm-dd" 또는 더 나은 "YYYYmmdd" 많은 문화권에서 흔히 볼 수있는 "dd/mm/YYYY"입니다. 이 블로그 게시물을 참조하십시오. 추진하는 나쁜 습관 : 잘못된 날짜 / 범위 쿼리 처리

댓글

  • 그리고 '는 일반적으로 'YYYY-mm-dd' 또는 더 나은

    가 아니라 'mm/dd/YYYY'가 모호하고 SQL-Server에서의 해석은 로컬 설정에 따라 다릅니다.

  • @ypercube, Agreed , 업데이트 됨.

답변

“어떤 데이터베이스를 사용하고 있습니까?”라는 질문이 있습니다.

각 RDBMS에는 문제를 처리하는 고유 한 방법이 있습니다.

MySQL 인 경우 str_to_date를 사용합니다.

https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

이렇게하면 varchar를 날짜로 변환하고 날짜를 올바르게 정렬 할 수 있습니다. 날짜를 varchar 데이터 유형으로 정렬하면 예기치 않은 동작이 발생할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다