我將我的SQL存儲過程來Postgres的功能,但它在聲明中的一個產生的誤差轉換爲Postgres的功能
錯誤:在或附近有語法錯誤「」 第7行:CAST(時間( 0),'00:00' +(h.hour *間隔「1小時...... ^
下面是我的Postgres的功能和SQL存儲過程對此我converting.Please告訴我,我得到錯誤
CREATE OR REPLACE FUNCTION shiftwisedata_sp(INOut shift_id bigint,InOut userdate date,OUT shift_name character varying (50),OUT from_time character varying(50),OUT to_time character varying(50),OUT cal bigint)
RETURNS SETOF record AS
$BODY$
BEGIN
return query
SELECT userdate, s.shift_name,
CAST(time(0), '00:00' + (h.hour * interval '1Hour')) AS from_time,
CAST(time(0), '00:00' + ((h.hour + 1) * interval '1Hour')) AS to_time,
COALESCE(r.Readings, 0) AS readings
FROM shift_wise s
CROSS JOIN (VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
(10), (11), (12), (13), (14), (15), (16), (17), (18), (19),
(20), (21), (22), (23)) AS h(hour)
OUTER APPLY (SELECT SUM(r.param_value) AS Readings
FROM table_1 r
WHERE r.timestamp_col >= CAST(userdate as timestamp without time zone) + (h.hour * interval '1Hour')
AND r.timestamp_col < CAST(userdate as timestamp without time zone) + ((h.hour + 1) * interval '1Hour')) AS r
WHERE s.shift_id = shift_id
AND (s.to_time > s.from_time AND
h.hour >= date_part(HOUR, s.from_time) AND
h.hour < date_part(HOUR, s.to_time)
OR
s.to_time < s.from_time AND
(h.hour >= date_part(HOUR, s.from_time) OR
h.hour < date_part(HOUR, s.to_time))
)
ORDER BY s.to_time;
\t
END;
$BODY$
LANGUAGE plpgsql VOLATILE
CREATE PROCEDURE Shiftdata @date date, @shiftid int AS
SELECT @date, s.Shift_Name,
convert(time(0), dateadd(HOUR, h.hour, '00:00')) AS from_time,
convert(time(0), dateadd(HOUR, h.hour + 1, '00:00')) AS to_time,
coalesce(r.Readings, 0) AS readings
FROM Shift_Wise s
CROSS JOIN (VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
(10), (11), (12), (13), (14), (15), (16), (17), (18), (19),
(20), (21), (22), (23)) AS h(hour)
OUTER APPLY (SELECT SUM(r.Reading_Col) AS Readings
FROM Reading r
WHERE r.Timestamp_Col >= dateadd(HOUR, h.hour, convert(datetime, @date))
AND r.Timestamp_Col < dateadd(HOUR, h.hour + 1, convert(datetime, @date))) AS r
WHERE s.Shift_ID = @shiftid
AND (s.to_time > s.from_time AND
h.hour >= datepart(HOUR, s.from_time) AND
h.hour < datepart(HOUR, s.to_time)
OR
s.to_time < s.from_time AND
(h.hour >= datepart(HOUR, s.from_time) OR
h.hour < datepart(HOUR, s.to_time))
)
ORDER BY s.to_time
CAST('00:00' +(h.hour *間隔 '1小時')作爲時間戳沒有時區)AS from_time這是我如何修改是這樣嗎? – Parth
作爲便攜式解決方案,這看起來不錯。 (我會讓你決定,如果你想要一個時間,時間戳等) –
現在,instaed外部申請我使用左連接latreal是postgres,但它導致錯誤在哪裏s.shift_id = shiftid下面是我是什麼寫入左連接寬度(SELECT SUM(r.param_value)AS讀數 FROM table_1 r WHERE r.timestamp_col> = CAST(userdate作爲沒有時區的時間戳)+ h.hour * interval'1Hour' AND r.timestamp_col
Parth