2011-05-13 178 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