【发布时间】:2014-12-15 08:38:58
【问题描述】:
我想在 Postgres 中为此处显示的 Microsoft SQL Server 存储过程编写一个函数。 请帮忙。我想在 postgres 中使用这个存储过程作为函数。
USE [EMS_Demo_Db]
GO
/****** Object: StoredProcedure [dbo].[SP_HourWise] Script Date: 16-12-2014 10:48:53 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_HourWise]
@date_param datetime
AS
BEGIN
SET NOCOUNT ON;
DECLARE @start_time datetime = dateadd(HOUR, 6, @date_param)
; WITH Hours AS (
SELECT dateadd(HOUR, row_number() OVER(ORDER BY From_Time) - 1, @start_time) AS From_Time,
dateadd(HOUR, row_number() OVER(ORDER BY From_Time), @start_time) AS To_Time
FROM Table_2
)
SELECT CONVERT(varchar,@date_param, 103)
as Date_def, convert(time(0), h.From_Time) AS From_Time, convert(time(0), h.To_Time) AS To_Time,
MAX(t1.Param_Val) - MIN(t1.Param_Val) as Cal_ParamValue
FROM Table_1 t1
JOIN Hours h ON t1.Timestamp_col BETWEEN h.From_Time AND h.To_Time
WHERE Timestamp_col BETWEEN @start_time AND dateadd(HOUR, 24, @start_time)
GROUP BY h.From_Time, h.To_Time
HAVING COUNT(*) > 1
ORDER BY h.From_Time
END
转换后的 SP,但它给出的错误为
输入第 17 行末尾的函数定义意外结束:END$BODY$
CREATE FUNCTION sp_hourwise(OUT from_time time without time zone, OUT to_time time without time zone, OUT param_value bigint, INOUT timestamp_col timestamp without time zone) RETURNS record AS
$BODY$DECLARE v_start_time timestamp(3) = interval '6 HOUR' + @date_param;
BEGIN
With Hours As (
SELECT v_start_time + (row_number() OVER(ORDER BY from_time) - 1) * INTERVAL '1 day' AS from_time,
v_start_time + (row_number() OVER(ORDER BY from_time)) * INTERVAL '1 day' AS to_time
FROM table_2
)
SELECT CAST(time(0) h.from_time), CAST(time(0) h.to_time),
MAX(t1.param_value) - MIN(t1.param_value)
FROM Table_1 t1
JOIN Hours h ON t1.timestamp_col BETWEEN h.from_time AND h.to_time
WHERE timestamp_col BETWEEN v_start_time AND interval '24 HOUR' + v_start_time
GROUP BY h.from_time, h.to_time
HAVING COUNT(*) > 1
ORDER BY h.from_time
END$BODY$
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF;
【问题讨论】:
-
convert转换为cast()。;位于语句的end 而非开头。有关返回结果的函数示例,请参见手册:postgresql.org/docs/current/static/xfunc-sql.html -
dateadd怎么样,有AS...你能把转换后的SP贴出来
-
这不是免费的代码编写服务,您必须展示自己的一些努力。常用表表达式相同:postgresql.org/docs/current/static/queries-with.html 日期算术在手册中也有说明:postgresql.org/docs/current/static/functions-datetime.html
-
让我澄清一下 - 您要求我们免费完成您的工作,而您仍然保留为完成工作而收集的钱?开始学习你的工作,然后你就不必四处请人来做你的工作了。
-
让我澄清一下@Tom,我没有从中得到任何钱。我对这些技术很陌生,所以我问的是这个,而不是问整个工作。
标签: sql-server postgresql stored-procedures