2016-12-16 8 views
0

私は特定のタイムスロットのデータを取得するために作成した関数を呼び出そうとしていました。下記の私の機能のスクリプトです:POSTGRESQL - 入力パラメータと異なる時刻で関数を呼び出す

CREATE OR REPLACE FUNCTION my_function(
    starttime timestamp with time zone, 
    endtime timestamp with time zone) 
RETURNS TABLE("Deviceid" integer, "AlertTime" timestamp with time zone) 
    LANGUAGE 'plpgsql' 
    COST 100.0 

AS $function$ 

DECLARE 

r record; 

BEGIN 


SELECT "DeviceID" , "AlertTime" FROM my_table 
WHERE "AlertTime" BETWEEN starttime AND endtime; 

END; 

$function$; 

ALTER FUNCTION public.my_function(timestamp with time zone, timestamp with time zone) 
    OWNER TO postgres; 

私は、時間との関数を呼び出しています「2016年12月15日0時00分01秒」「2016年12月15日午前18時00分00秒」に私はレコードを取得していない。タイムスロットのために利用できる多くのレコードでさえ、関数内のクエリのために同じ時間値を渡し、データを適切に取得することによってチェックしました。

select * from my_function('2016-12-14 00:00:01','2016-12-15 18:00:00') 

しかし、私は 『2016年12月15日夜06時00分00秒に』 2016年12月15日午後12時00' 分○○秒で関数を呼び出していたとき、私はすべてのレコードを取得することができています。

でも、私は入力パラメータを「可変文字」に変更し、内部でタイムスタンプに変換しようとしましたが、動作していません。

+0

あなたの機能は完全に冗長です! – e4c5

+0

@ e4c5:適切な修正を教えてください –

+0

あなたの関数は、単にselectとしてテーブルの結果を返します。なぜあなたは単に選択を行うことができるときにこのようなことに地球上で時間と労力を費やすのですか? – e4c5

答えて

1

説明は明らかですね。

mytableのすべての一致する行は、"AlertTime"より大きく、または2016-12-14 00:00:00より大きく、2016-12-14 00:00:01未満です。

+0

関数内のクエリに対して同じ時間値を渡してチェックしました。データが正しく取得されました。 –

+0

あなたの本当の機能は、あなたの質問のものとは別の何かをしなければなりません。 –

関連する問題