声明:我是PostgreSQL的新手,甚至更新到plpgSQL中的函数。我读过文档,但我很难过。函数内部的查询返回NULL,查询返回值
无论如何,我有这个功能,选择一个负责带出表的星号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
============================
其中“天”是一个工作日的名称,乐队是一个调用(“峰”充电带,“非高峰期”,“周末” )并且开始和结束是该充电带的开始和结束时间。
当我运行
SELECT getBand('2013-05-03 11:30:00');
我得到一个空的结果。
当我运行
SELECT band FROM bands
WHERE day = 'Friday' AND start < '11:30:00' and finish > '11:30:00' LIMIT 1;
我得到正确的答案(我的数据): '峰值'
我很困惑。任何人都想告诉我我哪里出错了?
请在回答之前仔细阅读该问题。输入字符串格式为'YYYY-MM-DD HH24:MI:SS',因为它来自Asterisk CDR表。 “频段”表是呼叫的收费频段列表,用于确定“峰值”,“非高峰”和“周末”通话资费何时处于活动状态。该表具有格式“乐队”,“日”,“开始”,“结束”。有效行的例子是“星期一”,“峰值”,“08:00:00”,“18:00:00”。 – 2013-05-03 20:46:08