【发布时间】:2012-03-15 21:29:27
【问题描述】:
所以我有一个程序,我目前正在调试过程中,我已将其缩小到这个选择语句。
注意:to_date(''), 3300, 5220 表示来自参数的内容。
SELECT SHIFT_ID_PK, SHIFT_NAME_FK,
SHIFT_START_DAY, SHIFT_START_TIME,
SHIFT_END_DAY, SHIFT_END_TIME,
SITE_ID_FK, SHIFT_DAY_ID,
STARTOFFSET, ENDOFFSET,
TO_TIMESTAMP_TZ((TO_DATE('3/13/2012 7:00 ', 'mm/dd/yyyy HH:MI:SS am') - (3300 / 24 / 60)) + (STARTOFFSET / 24 / 60), 'YYYY-MM-DD HH:MI:SS TZH:TZM') AS SHIFT_START_DATE,
TO_TIMESTAMP_tz((TO_DATE('3/14/2012 1:00 ', 'mm/dd/yyyy HH:MI:SS am') - (5220 / 24 / 60)) + (ENDOFFSET / 24 / 60), 'YYYY-MM-DD HH:MI:SS TZH:TZM') AS SHIFT_END_DATE
from shift_tbl
WHERE
ENDOFFSET >= 3300
AND STARTOFFSET < 5220
order by shift_start_date asc, shift_end_date;
现在假设要做的是,获取时间戳参数并减去偏移值。
该值表示星期天午夜 = 0 时一周内过去的分钟数。(因此,如果是星期一午夜,则偏移量 = 1440)。
当从参数中减去偏移量时,您就得到了一周的开始。然后,您从已经预先确定的表中获取偏移值,并将该值添加到一周的开始以获取时间戳。
这样做是为了获取轮班的开始日期和结束日期。
现在您将在下面看到来自此的结果集示例:
SHIFT_ID_PK SHIFT_NAME_FK SHIFT_START_DAY SHIFT_START_TIME SHIFT_END_DAY SHIFT_END_TIME SITE_ID_FK SHIFT_DAY_ID STARTOFFSET ENDOFFSET **SHIFT_START_DATE SHIFT_END_DATE**
6146 6206 3 23:00 4 7:00 2450 3 4260 4740 **11-MAR-13 11.00.00.000000000 PM -05:00 11-MAR-14 07.00.00.000000000 PM -05:00**
现在我的问题是我的 shift_start_date 和 shift_end_date 的值是一样的
SHIFT_ID_PK SHIFT_NAME_FK SHIFT_START_DAY SHIFT_START_TIME SHIFT_END_DAY SHIFT_END_TIME SITE_ID_FK SHIFT_DAY_ID STARTOFFSET ENDOFFSET **SHIFT_START_DATE SHIFT_END_DATE**
6146 6206 3 23:00 4 7:00 2450 3 4260 4740 **11-MAR-13 11.56.00.000000000 PM -05:00 11-MAR-13 11.56.00.000000000 PM -05:00**
用
标记的值 **.....**
是我所说的价值观。
我已经尝试了几种不同的方法来解决这个问题,但是我所做的一切都没有奏效,所以我想我只是错过了导致这个问题的一些非常简单的东西。
非常感谢任何帮助或建议。谢谢。
【问题讨论】:
-
除非我遗漏了什么,
shift_start_date和shift_end_date在这两种情况下的值是不同的。所以我不确定我是否理解您认为不正确的内容。 -
抱歉打错了。我得到的现在正确显示了
标签: sql oracle plsql timestamp