2014-01-22 5 views
4

2 개의 날짜 사이에있는 데이터베이스를 쿼리하려고합니다 ... 문제는 현재 쿼리중인 열에 현재 이와 같은 형식의 날짜가 포함 된 것입니다. "01/01/2014 "(dd/mm/yyyy)이고 VARCHAR 유형의 컬럼입니다.유형이 VARCHAR 일 때 날짜에 SQL 쿼리

현재 열을 날짜 유형으로 변환 할 수 없습니다. 그것이 올바른 행을 반환하지 않는 쿼리 사이의 날짜 형식 ...으로 설정되어 있지 있기 때문에 나는 테이블을 쿼리 할 때

기본적으로

다른 사람이 문제가 건너했습니다

는, 나는 내에서 변경할 수있는 무언가가있다 질문?

$this->db->where('IssueDate >=', '02/12/2013'); 
$this->db->where('IssueDate <=', '22/01/2014'); 
$query = $this->db->get('MYTABLE'); 

감사합니다.

+0

쿼리에서 날짜로 값을 전송하십시오. –

+0

아무도 나를 도울 수 있습니까? – WebDevB

답변

5

이 솔루션은 str_to_date()을 사용하는 것입니다

$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') >=", "'2013-12-92'"); 
$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') <=", "'2014-01-22'"); 
$ 

당신은 데이터베이스에 대한 제어가 없을 수 있습니다. 그러나 당신은 자신의 상수를 통제 할 수 있습니다. 그러한 상수에 대한 ISO 표준 YYYY-MM-DD에 익숙해야합니다. 모호하지 않으며 대부분의 데이터베이스에서 올바르게 수용해야합니다. 형식이 정렬되어 쉽게 다른 유사한 포맷 기간에 비해 비교할 수

+0

Gordan, 고마워요. 이걸 고맙다. 나는 그것을 시험해 보았다. 아무 이유없이 나는 아무것도 얻지 못했다. ... 이것은 내가 가지고있는 것이다 : $ this-> db-> where ''str_to_date (IssueDate , '% d/% m/% Y')> = ', '02/12/2013'); – WebDevB

+0

@WebDevB. . . 데이터베이스에서 문자열을 유효한 날짜로 해석할지 여부는 알 수 없습니다. '2013-12-02'만 사용하면됩니다. –

+0

@WebDevB 사용자는'where ("")'메소드에 대한 큰 따옴표와'str_to_date()'함수 내의 SQL 쿼리에 대한 작은 따옴표). –

0
난 당신이 다음과 같은 형식으로이 문자열 날짜 열을 변환 데이터베이스의 테이블에 뷰를 작성하는 것이 좋습니다 수

... YYYYMMDD

- 당신은 심지어 그것으로 날짜 계산을 할 수 있습니다.

뷰는 테이블을 복사하거나 성능 오버 헤드를 추가하지 않습니다. 초기에 기본 테이블에 대한 조작을 수행 할 필요가 없더라도 나중에보기를 통해 모든 테이블에 액세스하는 것이 좋습니다. 나중에 수행해야하는 경우 도움이됩니다.

0

STR_TO_DATE()을 사용하십시오. 아래 코드를 확인하십시오 : -

$wh = STR_TO_DATE(`IssueDate`,'%d/%m/%Y')." between '02/12/2013' and '22/01/2014'"; 
$this->db->where($wh); 

완벽한 결과를 기대하십시오.

+0

이것은 어느 쪽도 작동하지 않는 것 같습니다 ... 내가 무엇을 놓치고 있습니까 ?? – WebDevB

+0

@WebDevB 어떤 오류가 있습니까? 스키마 테이블 스키마를 레코드로 제공 할 수 있습니까? 그 때 나는 정확한 해결책을 당신에게 제공 할 수 있습니다. – ripa