使用extract(month from the_date)
而不是to_char
。請參閱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)
一個整數劃時代的日期。只有timestamp
版本的to_char
做日期格式; 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'嗎?不是'日期'?不是'時間戳'?你的問題是否是一個錯誤?如果它是一個整數,你期望如何得到一個日期?它是一個時代日期(自某個日期以來的秒數)? –
@克雷格抱歉,我的錯。是的,這是一個時代的日期。 – Thili
那麼,'to_char'會做什麼?你在'psql'中試過了嗎?讓我們來看看:'select to_char(extract(current_timestamp的時期),'Mon')'只輸出字符串「Mon」,它永遠不會等於字符串「Jul」。所以你的問題是,你在調用'to_char'的整數版本,並期望它知道你想把整數作爲一個日期。請參閱psql中的'\ df to_char'以查看所有'to_char'變體。只有'timestamp'的日期格式符合[documentation](http://www.postgresql.org/docs/current/static/functions-formatting.html) –