从日期转换为epoch-Oracle

时间:2016-06-27 13:24:39

标签: sql oracle

我需要将TextBox中的日期从日期转换为纪元时间,以便我可以将其插入Oracle DB。

我设法将纪元转换为日期,如下所示,但找不到以其他方式转换它的方法。

SelectCommand="SELECT ID,
            COMPANY,
            FIRST_NAME,
            LAST_NAME,
            ID_NUMBER,
            (SELECT TO_CHAR(TO_DATE('01-JAN-1970','DD/MM/YYYY')
            +(TRAINING_DATE/60/60/24), 'MM/DD/YYYY') FROM dual) AS TRAINING_DATE,
            (SELECT TO_CHAR(TO_DATE('01-JAN-1970','DD/MM/YYYY')
            +(TRAINING_VALABILITY/60/60/24),'MM/DD/YYYY') FROM dual) AS TRAINING_VALABILITY
    FROM CONTRACTORS
    ORDER BY COMPANY"

3 个答案:

答案 0 :(得分:5)

从值中减去DATE '1970-01-01'会给出天数(和小时/分钟/秒)的差异,然后您可以乘以24*60*60

(date_value - DATE '1970-01-01')*24*60*60

答案 1 :(得分:1)

UpdateCommand="UPDATE CONTRACTORS
                                           SET COMPANY=:COMPANY,
                                               FIRST_NAME=:FIRST_NAME,
                                               LAST_NAME=:LAST_NAME,
                                               ID_NUMBER=:ID_NUMBER,
                                               TRAINING_DATE=(TO_DATE(:TRAINING_DATE, 'MM-DD-YYYY HH24:MI:SS') - TO_DATE('01-JAN-1970','DD/MM/YYYY'))*24*60*60,
                                               TRAINING_VALABILITY=(TO_DATE(:TRAINING_VALABILITY, 'MM-DD-YY`enter code here`YY HH24:MI:SS') - TO_DATE('01-JAN-1970','DD/MM/YYYY'))*24*60*60
                                           WHERE (ID=:ID)"

答案 2 :(得分:0)

我使用此解决方案,无论输入日期当地时间是否在夏令时 (DST) 期间,它都能正常工作。

with intermediate as (select 
 *,
 row_number() over ( partition by agreement_id, order_id ) as nrow,
 (sum( suma ) over ( partition by agreement_id, order_id ))::numeric( 10, 2) as order_suma,
from <your table>)

select 
  *,
  sum( order_suma ) filter (where nrow = 1) over (partition by agreement_id)
from intermediate