데이터베이스 테이블에서 날짜 속성을 만들었지 만 그 유형을 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
이를 수행합니다.
댓글
답변
사용중인 데이터베이스에 따라 문자열을 날짜로 변환 한 다음 비교를 수행 할 수 있어야합니다.
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 데이터 유형으로 정렬하면 예기치 않은 동작이 발생할 수 있습니다.
dates
로 저장하는 것이 항상 훨씬 낫기 때문에 지금 테이블 정의를 변경할 수없는 이유가 있습니까? 아니면 도움을 요청하고 있습니까?