聲明:我是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