Postgresql 转换为Postgres函数

Postgresql 转换为Postgres函数,postgresql,Postgresql,我正在将我的SQL存储过程转换为Postgres函数,但这会导致以下语句之一出现错误: 错误:在或附近出现语法错误, 第7行:CASTtime0,'00:00'+小时*间隔'1小时。。。 ^ 下面是我正在转换的Postgres函数和SQL存储过程。请告诉我哪里出错了 创建或替换函数shiftwi\u spINOut shift\u id bigint、InOut userdate date、OUT shift\u name variable 50、OUT from\u time charact

我正在将我的SQL存储过程转换为Postgres函数,但这会导致以下语句之一出现错误:

错误:在或附近出现语法错误, 第7行:CASTtime0,'00:00'+小时*间隔'1小时。。。 ^

下面是我正在转换的Postgres函数和SQL存储过程。请告诉我哪里出错了

创建或替换函数shiftwi\u spINOut shift\u id bigint、InOut userdate date、OUT shift\u name variable 50、OUT from\u time character varying50、OUT to\u time character varying50、OUT cal bigint 将记录集返回为 $BODY$ 开始 返回查询 选择userdate,s.shift\u name, CASTtime0,'00:00'+小时*间隔'1小时', CASTtime0,'00:00'+h.hour+1*时间间隔'1Hour', 聚结器读数,0为读数 从shift_-wise s 交叉连接值0、1、2、3、4、5、6、7、8、9、, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20、21、22、23岁时 外部应用选择SUMr.param_值作为读数 来自表1 r 其中r.timestamp_col>=CASTuserdate作为不带时区的时间戳+h.hour*间隔“1Hour” r.timestamp_cols.from_time和 h、 小时>=日期部分小时,s.自时间和 h、 小时<日期\u部分小时,s到\u时间 或 s、 到时间=日期部分小时,s.自时间或 h、 小时<日期\u部分小时,s到\u时间 由s.to_时间订购; 终止 $BODY$
语言plpgsql VOLATILE这不是Postgresql中CAST的工作方式。看

如果您不介意使用非标准::符号,那么最容易阅读IMHO。

最后, 将SQL SP转换为Postgres函数,得到了预期的结果

创建或替换函数shiftwi\u spIN shiftid bigint、INOUT userdate date、OUT shift\u name字符变化、OUT from\u time(不带时区)、OUT to\u time(不带时区)、OUT reads bigint 将记录集返回为 $BODY$ 开始 返回查询 选择userdate,s.shift\u name, “00:00”+h.hour*间隔“1Hour”::从_time开始的时间, “00:00”+h.hour+1*间隔“1Hour”::与时间相关的时间, 聚结器读数,0为读数 从shift_-wise s 交叉连接值0、1、2、3、4、5、6、7、8、9、, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20、21、22、23岁时 左连接横向选择CASTSUMr.param_值作为bigint作为读数 来自表1 r 其中r.timestamp_col>=CAStuserdate作为不带时区的时间戳+h.hour*间隔“1Hour” 和r.timestamp_cols.from_time和 h、 小时>=ExtractHOUR from CASTs.from_time as time AND h、 小时<从时间到时间的提取小时 或 s、 到时间=从铸件中提取小时。从时间作为时间或 h、 小时<从时间到时间的提取小时 由s.to_时间订购; 终止 $BODY$
语言plpgsql VOLATILECAST'00:00'+h.hour*interval'1Hour'作为时间戳,不带时区,从\u time开始这就是我修改的方式,对吗?这看起来很适合作为便携式解决方案。我会让你决定你是否想要一个时间,时间戳等等,外部应用的安装我使用的是left join latreal是postgres,但这会导致错误,其中s.shift\u id=shiftid下面是我正在写入的内容,left join横向选择SUMr.param\u值作为表中的读数,其中r.timestamp\u col>=CASTuserdate作为时间戳,没有时区+h*间隔“1Hour”和r.timestamp\u col('00:00' + (h.hour * interval '1Hour'))::time