to_char
대신 extract(month from the_date)
을 사용하십시오. datetime functions in the Pg docs을 참조하십시오.
to_char
으로 대소 문자, 현지화 등의 모든 문제가 발생합니다. 당신이 effective_date
의 데이터 유형이 timestamp
또는 date
것을 의미 가정
, 당신은 쓸 것 :
$query = "select *
from ". $this->getTable() ."
where pay_stub_entry_name_id = 43
AND extract(month from effective_date) = 7
AND deleted = 0";
를 그 다음 integer
을 있다면 - 그것은 획기적인 일이다 가정 - 당신이 타임 스탬프로 변환해야 to_timestamp
을 입력 한 다음 extract
을 사용하십시오. 위의 링크 된 문서, 예에 epoch
섹션을 참조하십시오 : 문제의
$query = "select *
from ". $this->getTable() ."
where pay_stub_entry_name_id = 43
AND extract(month from to_timestamp(effective_date)) = 7
AND deleted = 0";
직접적인 원인은 정수 시대 날짜가 to_char(integer,text)
를 호출 한 것이 었습니다. to_char
의 timestamp
버전 만 날짜 형식을 지정합니다. Mon
은 다른 것들에는 특별한 것이 아니므로 리터럴 문자열 Mon
으로 출력됩니다. 비교 :
regress=# SELECT to_char(current_timestamp, 'Mon');
to_char
---------
Aug
(1 row)
regress=# select to_char(extract(epoch from current_timestamp), 'Mon');
to_char
---------
Mon
(1 row)
SQL injection을 피하기 위해 실제 검색어 버전을 매개 변수로 설정해야합니다.
잠깐만 요, 당신은'effective_date'가'integer' 데이터 타입을 가지고 있다고 말했습니까? '날짜'가 아닌가요? '타임 스탬프'가 아닌가요? 귀하의 질문에 실수였습니까? 그것이 정수라면 어떻게 그것에서 날짜를 얻을 것으로 예상합니까? 그것은 획기적인 날짜입니까? (특정 날짜 이후 초)? –
@Craig 죄송합니다. 실수입니다. 네, 그것은 신기원입니다. – Thili
그럼,'to_char'는 어떻게할까요? 'psql'에서 해봤습니까? 'select to_char (extract (current_timestamp에서의 신기원), 'Mon')'은 단지'Jul'이라는 문자열과 결코 같지 않을'Mon' 문자열을 출력합니다. 그래서 문제가 있습니다, 당신은'to_char'의 정수 버전을 호출하고 정수를 날짜로 취급하기를 원한다는 것을 알기를 기대합니다. 모든 to_char 변종을 보려면 psql의'\ df to_char'를보십시오. 'timestamp' 만이 [documentation] (http://www.postgresql.org/docs/current/static/functions-formatting.html) –