use*_*201 4 postgresql plpgsql
我有以下存储过程,它返回0结果,但如果单独运行查询,则会产生大量结果.我错过了什么.
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;
Run Code Online (Sandbox Code Playgroud)
返回0结果
SELECT COUNT(*) FROM statistics WHERE time_stamp = '2015-01-01 01:00:00';
Run Code Online (Sandbox Code Playgroud)
返回100+结果
您将baselineDate参数声明为date:
CREATE OR REPLACE FUNCTION countStatistics(baselineDate Date)
Run Code Online (Sandbox Code Playgroud)
但用它作为timestamp:
SELECT COUNT(*) INTO qty FROM statistics WHERE time_stamp = baselineDate;
Run Code Online (Sandbox Code Playgroud)
你得到一个隐式转换,所以countStatistics('2015-01-01 01:00:00')实际上会执行这个SQL:
SELECT COUNT(*) INTO qty FROM statistics WHERE time_stamp = '2015-01-01';
Run Code Online (Sandbox Code Playgroud)
并且,在date隐含地回归到a之后timestamp,它实际上将是这样的:
SELECT COUNT(*) INTO qty FROM statistics WHERE time_stamp = '2015-01-01 00:00:00';
Run Code Online (Sandbox Code Playgroud)
尝试更改函数声明以使用timestamp:
CREATE OR REPLACE FUNCTION countStatistics(baselineDate timestamp)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11389 次 |
| 最近记录: |