![](/img/trans.png)
[英]In Oracle SQL: How do you insert the current date + time into a table?
[英]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.