如何在oracle10g数据库中插入当前系统日期和时间

如何在oracle10g数据库中插入当前系统日期和时间,oracle10g,Oracle10g,我创建了一个具有列date_time类型(varchar2(40))的表,但当我尝试插入当前系统日期和时间时,该表不起作用,它会给出错误(值太多)。请告诉我insert语句有什么问题 create table HR (type varchar2 (20), raised_by number (6), complaint varchar2 (500), date_time varchar2(40)) insert into HR values ('request',6785,'good mor

我创建了一个具有列date_time类型(varchar2(40))的表,但当我尝试插入当前系统日期和时间时,该表不起作用,它会给出错误(值太多)。请告诉我insert语句有什么问题

create table HR (type varchar2 (20), raised_by number (6), complaint varchar2 (500), date_time varchar2(40))


insert into HR values ('request',6785,'good morning',sysdate,'YYYY/MM/DD:HH:MI:SSAM')

您可以使用TO_DATE()TO_TIMESTAMPTO_char()函数

在HR值中插入('request',6785,'good morning',TO_DATE(sysdate,'yyyyy/mm/dd hh24:mi:ss'))

在HR值中插入('request',6785,'good morning',TO_TIMESTAMP(systimestamp,'yyyy/mm/dd hh24:mi:ss'))

sysdate-它将给出带有时间的日期

systimestamp-它将以毫秒为单位给出日期时间

To_date()-用于将字符串转换为日期。 To_char()-用于将日期转换为字符串


可能在这里您必须使用to_char(),因为您的表定义的日期时间列有varchar type。

使用
时间戳
数据类型
日期时间
。插入时使用当前时间戳

create table HR (type varchar2(20), raised_by number(6), complaint varchar2(500), date_time timestamp);


insert into HR values ('request',6785,'good morning', systimestamp);

对于其他选项:

如消息所述,错误的直接原因是您的值太多;也就是说,
values
子句中的元素多于列。最好显式列出列名,以避免将来出现问题和混淆,因此您实际上是这样做的:

insert into HR (type, raised_by, complaint, date_time)
values ('request',6785,'good morning',sysdate,'YYYY/MM/DD:HH:MI:SSAM')
。。。sp您有四列,但有五个值。您试图将当前日期/时间作为字符串插入,因此需要使用:

但将日期(或任何其他结构化数据,如数字)存储为字符串是不好的做法。作为:

Oracle数据库操作的每个值都有一个数据类型。数据 值的类型将一组固定的属性与该值相关联。 这些属性导致Oracle处理一种数据类型的值 与他人的价值观不同。例如,可以添加的值 数字数据类型,但不是原始数据类型的值

如果使用字符串,则可以在中输入无效值。如果使用正确的
日期
数据类型,则不能意外地将无效或混淆的值放入。Oracle还能够优化列的使用,并能够安全高效地比较值。虽然您使用的格式比某些格式好,但使用字符串比较时,您仍然无法轻松比较两个值以查看哪个值更早,因此您无法按
date\u time
列正确排序

假设您插入了两行,其值分别为
2013/11/15:09:00:00AM
2013/11/15:08:00:00PM
-哪个更早?您需要查看AM/PM标记,以意识到第一个标记更早;如果使用字符串比较,则会出现错误,因为
8
将在
9
之前排序。使用
HH24
而不是
HH
AM
可以避免这种情况,但效率仍然低于真实日期

如果需要使用时间组件存储日期,则可以使用,其精度可降至秒;或者,如果您也需要小数秒,则可以使用
时间戳
。那么您的表和插入将是:

create table HR (type varchar2 (20), raised_by number (6),
  complaint varchar2 (500), date_time date);

insert into HR (type, raised_by, complaint, date_time)
values ('request',6785,'good morning',sysdate);
作为查询的一部分,您仍然可以以显示目的所需的格式获取值:

select type, raised_by, complaint,
  to_char(date_time, 'YYYY/MM/DD:HH:MI:SSAM') as date_time
from HR
order by date_time;

TYPE                  RAISED_BY COMPLAINT            DATE_TIME           
-------------------- ---------- -------------------- ---------------------
request                    6785 good morning         2013/11/15:08:44:35AM 
仅将日期作为字符串进行显示

select type, raised_by, complaint,
  to_char(date_time, 'YYYY/MM/DD:HH:MI:SSAM') as date_time
from HR
order by date_time;

TYPE                  RAISED_BY COMPLAINT            DATE_TIME           
-------------------- ---------- -------------------- ---------------------
request                    6785 good morning         2013/11/15:08:44:35AM