2011-05-13 179 views
4

我有以下存儲過程,它返回0結果,但如果運行查詢本身,它會導致很多結果。我錯過了什麼。PostgreSQL存儲過程數據參數

CREATE OR REPLACE FUNCTION countStatistics(baselineDate Date) RETURNS int AS $$ 
DECLARE 
    qty int; 
BEGIN 
    SELECT COUNT(*) INTO qty FROM statistics WHERE time_stamp = baselineDate; 
    RETURN qty; 
END; 
$$ LANGUAGE plpgsql; 

--Execute the function 
SELECT countStatistics('2015-01-01 01:00:00') as qty; 

返回0結果

SELECT COUNT(*) FROM statistics WHERE time_stamp = '2015-01-01 01:00:00'; 

回100+導致

回答

6

你聲明你baselineDate參數作爲date

CREATE OR REPLACE FUNCTION countStatistics(baselineDate Date) 

,但是用它作爲timestamp

SELECT COUNT(*) INTO qty FROM statistics WHERE time_stamp = baselineDate; 

你得到隱式轉換所以countStatistics('2015-01-01 01:00:00')實際上將執行此SQL:

SELECT COUNT(*) INTO qty FROM statistics WHERE time_stamp = '2015-01-01'; 

和,後date隱式轉換回timestamp,這將有效地是這樣的:

SELECT COUNT(*) INTO qty FROM statistics WHERE time_stamp = '2015-01-01 00:00:00'; 

嘗試更改您的函數聲明以使用timestamp

CREATE OR REPLACE FUNCTION countStatistics(baselineDate timestamp) 
+0

感謝您的幫助。 – user373201 2011-05-14 02:24:42