我有下表,其中一個字段的類型爲timestamp
。PostgreSQL 9.3:只檢查時間戳
Create table Test_Timestamp
(
ColumnA timestamp
);
現在插入一些記錄演示:
INSERT INTO Test_Timestamp VALUES('1900-01-01 01:21:15'),
('1900-01-01 02:11:25'),
('1900-01-01 12:52:10'),
('1900-01-01 03:20:05');
現在我已經創建了功能Function_Test
有兩個參數,即St_time
和En_Time
這 VARCHAR類型的,我在其中只通過time
像00:00:01
。之後函數有 以兩個時間參數的條件返回表。
CREATE OR REPLACE FUNCTION Function_Test
(
St_Time varchar,
En_Time varchar
)
RETURNS TABLE
(
columX timestamp
)
AS
$BODY$
Declare
sql varchar;
wher varchar;
BEGIN
wher := 'Where columna BETWEEN '|| to_char(cast(St_Time as time),'''HH24:MI:SS''') ||' AND '|| to_char(cast(En_Time as time),'''HH24:MI:SS''') ||'';
RAISE INFO '%',wher;
sql := 'SELECT * FROM Test_Timestamp ' || wher ;
RAISE INFO '%',sql;
RETURN QUERY EXECUTE sql;
END;
$BODY$
LANGUAGE PLPGSQL;
---調用函數
SELECT * FROM Function_Test('00:00:00','23:59:59');
但得到一個錯誤:
ERROR: invalid input syntax for type timestamp: "00:00:01"
LINE 1: ...ELECT * FROM Test_Timestamp where ColumnA BETWEEN '00:00:01'...
爲什麼當你需要一個varchar時間?將時間戳記轉換爲時間數據類型,並獲取時間戳的時間部分。看起來你讓事情變得複雜。 – 2015-04-02 11:34:10
@FrankHeikens,正好!非常感謝。 – MAK 2015-04-02 11:38:12