繁体   English   中英

如何插入当前系统日期和时间?

[英]How do you insert current system date and time?

我尝试使用以下查询插入当前系统日期和时间,当我使用to_timestamp(sysdate,'DD-MON-RR HH24.MI.SSXFF')我没有时间。

如果我将其更改为to_char(sysdate,'DD-MM-YYYY HH:MI:SS')则会收到“无效的月份错误”

  insert into drv.t_evthst1 (
    vehicle_no,
    business_txn_date,
    business_txn_time,
    business_txn_count,
    part_vehicle_no,
    business_txn,
    bus_txn_appl_rslt,
    act_eps_date,
    act_eps_time,
    business_txn_src,
    event_code,
    event_indicator,
    activity_code,
    fnl_stock_status,
    old_fnl_stock_st,
    coveh_status,
    old_coveh_status,
    damg_status,
    old_damg_status,
    apt_status,
    old_apt_status,
    reg_status,
    old_reg_status,
    consign_status,
    old_consign_status,
    demo_veh_status,
    old_demo_veh_st,
    ordering_status,
    old_ordering_st,
    hold_status,
    old_hold_status,
    ctms_clear_status,
    old_ctms_clear_st,
    invc_status,
    old_invc_st,
    ibmsnap_logmarker,
    created_by,
    created_ts,
    updated_by,
    updated_ts,
    src_sys_id
  )
  values (
    '0004VT9K',
    to_date('31-AUG-18', 'DD-MON-RR'),
    to_date('01-JAN-01', 'DD-MON-RR'),
    8,
    '1',
    'PR01',
    '01',
    to_date('31-AUG-18', 'DD-MON-RR'),
    to_date('01-JAN-01', 'DD-MON-RR'),
    'DREPP750',
    '60',
    ' ',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    '0',
    ' ',
    to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'),
    'DRVMRSP1',
    to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'),
    'DRVMRSP1',
    to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'),
    '1750'
  )

错误开始于第3行:
错误报告-ORA-01843:无效月份

假设相关的列定义为DATE和/或TIMESTAMP ,则根本不要操纵sysdate (或systimestamp )值。

代替:

...
to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'),
'DRVMRSP1',
to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'),
'DRVMRSP1',
to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'),
'1750'

做就是了:

...
sysdate,
'DRVMRSP1',
sysdate,
'DRVMRSP1',
sysdate,
'1750'

要么

...
systimestamp,
'DRVMRSP1',
systimestamp,
'DRVMRSP1',
systimestamp,
'1750'

当您使用类似的方法插入日期列时:

to_char(sysdate, 'DD-MM-YYYY HH:MI:SS')

您正在将当前日期和时间转换为字符串(但是使用了12小时的时间,因此您HH24在AM和PM之间进行区分-您可以使用HH24而不是HH避免这种情况,但这是附带问题)。 然后,您将隐式转换回日期,因为这是目标列数据类型,因此实际上您具有:

to_date(to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'))

它使用您的会话NLS_DATE_FORMAT设置,因此实际上是这样的:

to_date(to_char(sysdate, 'DD-MM-YYYY HH:MI:SS'), 'DD-MON-RR')

的确会抛出“ ORA-01843:无效的月份”。

另外,您在哪里:

to_date('31-AUG-18', 'DD-MON-RR')

您所依赖的会话语言是英语,因此您应该在to_date()调用中指定它,或者使用月份号; 而且实际上没有任何理由再使用两位数的年份。 您也可以将其替换为ANSI日期文字:

date '2018-08-31'

看来您正在将business_txn_date和time分为两列,这实际上也没有任何意义。

当我使用to_timestamp(sysdate,'DD-MON-RR HH24.MI.SSXFF')我没有时间。

这也是由于隐式转换-实际上,再次猜测您的NLS_DATE_FORMAT ,这样做:

to_timestamp(to_char(sysdate, 'DD-MON-RR'), 'DD-MON-RR HH24.MI.SSXFF') from dual;

因此,您要丢弃隐式to_char()调用中的时间部分,然后to_timestamp()通过将所有缺少的组件都视为零而不是抱怨而变得“有帮助”。

假设有问题的字段是DATE类型,并且应该是,只需插入sysdate。

to_char(sysdate,'DD-MM-YYYY HH:MI:SS')->看起来不错,

您的错误位于第3行,然后请尝试填写年份并遵循以下格式:

to_date('31-AUG-2018', 'DD-MON-YYYY')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM