Datetime 将时间函数从oracle更改为postgresql
我在将2号数据函数从oracle传输到postgresql时遇到问题,您能帮助我: 数据: 区间=数字(10,0) 开始日期=不带时区的时间戳 重复次数=数字(10,0) 这个表达式是我从case state复制的。我必须在postgresql中编写等价的逻辑操作Datetime 将时间函数从oracle更改为postgresql,datetime,postgresql-9.2,Datetime,Postgresql 9.2,我在将2号数据函数从oracle传输到postgresql时遇到问题,您能帮助我: 数据: 区间=数字(10,0) 开始日期=不带时区的时间戳 重复次数=数字(10,0) 这个表达式是我从case state复制的。我必须在postgresql中编写等价的逻辑操作 case when(摘录(从(开始日期+TRUNC(间隔时间*(重复次数-1)*7))开始的日期) -提取(当前_时间戳的日期))>=0,然后选择“确定” 第二: case when(节选)从add_months(开始)到TRUNC
case when(摘录(从(开始日期+TRUNC(间隔时间*(重复次数-1)*7))开始的日期)
-提取(当前_时间戳的日期))>=0,然后选择“确定”
第二:
case when(节选)从add_months(开始)到TRUNC(间隔)的日期*
重复次数-1)*12)-提取(从当前时间戳中提取日期)case when(
摘录(从(开始日期+间隔时间*(重复次数-1)*间隔时间“1周”)算起的日期)
>=
摘录(从当前_时间戳算起的日期))
然后“好”
当(
摘录(从(开始日期+间隔时间*(重复次数-1)*间隔时间“1年”)算起的日期)
与ORACLE相比,PostgreSQL对的支持更好
我想(很抱歉,您没有描述这一点),您需要根据间隔将时间戳
列与当前时间戳
进行比较,间隔是根据列间隔
和重复
计算得出的。我还认为,在第一个例子中,你与周间隔有关,在第二个片段中与月有关。(我不完全理解TRUNC(…)
部分代码背后的逻辑
我建议如下:
重命名开始日期
,删除\u日期
后缀,因为列的类型实际上是时间戳
,具有误导性
将间隔
转换为文本
并直接存储间隔类型,如月
或周
保持重复
不变,对于NULL
值,默认为1
PostgreSQL本机支持boolean
类型,因此您实际上不需要CASE…END
构造,但这取决于应用程序
因此,以下查询可以执行此操作(也可以在上执行):
选择开始、间隔、重复、,
开始时间+(重复时间间隔)::间隔
>=当前\u时间戳是否正常
从标签;
为了避免猜谜游戏,请描述您的表格,并更好地描述您需要实现的目标。我只需要PostgreSql中的等效逻辑表达式。我认为对于1,这很好:选择提取(从(当前日期+间隔“1”天*TRUNC(7*(2-1)))我认为比较天数是错误的,在甲骨文中也是错误的。如果你解释一下你的逻辑,你会得到更好的结果。为什么你用*interval“1周”?而不是day?@ukaszWoźniczka,如果你能解释一下你的计算逻辑,那就容易多了。对我来说1周
interval在这里看起来很自然。@ukaszWoźniczka这不是我的代码:)我是唯一的迁移人:P Java开发者不是数据库管理员。。。。
case when (
extract(DAY FROM (START_DATE + INTERVALL * (REPETITIONS - 1) * interval '1 week'))
>=
extract(DAY FROM CURRENT_TIMESTAMP))
then 'OK'
case when (
extract(DAY FROM (START_DATE + INTERVALL * (REPETITIONS - 1) * interval '1 year')))
<= extract(DAY FROM CURRENT_TIMESTAMP))
then 'ok'