免責事項: 私は 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 は通話の料金帯 (「ピーク」、「オフピーク」、「週末」) であり、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;
(私のデータに対して) 正しい答えが得られました:「ピーク」
よくわかりません。どこが間違っているのか教えてほしい人はいますか?