免责声明:我是 PostgreSQL 的新手,甚至对 plpgSQL 中的函数也很陌生。我已经阅读了文档,但我很困惑。
无论如何,我有这个功能,从星号 CDR 评级表中选择一个电荷带:
CREATE FUNCTION getBand(
callDateTime varchar
) RETURNS varchar AS $$
/* Select correct charging band */
DECLARE
callTime varchar;
callDay varchar;
theBand varchar;
BEGIN
/* Find the time and the day of the call */
callTime := to_char(to_timestamp(callDateTime,'YYYY-MM-DD HH24:MI:SS'),'HH24:MI:SS');
callDay := to_char(to_timestamp(callDateTime,'YYYY-MM-DD HH24:MI:SS'),'Day');
theBand := band
FROM bands
WHERE day = callDay
AND start < callTime
AND finish > callTime
LIMIT 1;
RETURN theBand;
END;
$$ LANGUAGE plpgsql
输入字符串从星号 CDR 表中提取,格式为“YYYY-MM-DD HH24:MI:SS”。
波段表的格式为
day | band | start | finish
============================
其中“day”是工作日的名称,band 是呼叫的收费区间(“Peak”、“Off Peak”、“Weekend”),start 和 finish 是该收费区间的开始和结束时间。
当我跑
SELECT getBand('2013-05-03 11:30:00');
我得到一个 NULL 结果。
当我跑
SELECT band FROM bands
WHERE day = 'Friday' AND start < '11:30:00' and finish > '11:30:00' LIMIT 1;
我得到了正确的答案(对于我的数据):'Peak'
我很困惑。有人想告诉我哪里出错了吗?