如何向 Oracle 表中的 Date 字段插入日期及时间

如题所述

第1个回答  2016-07-29
Oracle中与sqlserver 插入日期型数据时,有比较大的区别。sqlserver中,直接把日期型数据用单引号括起来就可以,而Oracle却必须用to_date('',''')这种强类型转换函数显示转换为Date类型。
例子(带时分秒):
insert into table(j) values(to_date('2000-11-26 00:04:47','yyyy-mm-dd hh24:mi:ss'));
代买参数化例子:
INSERT INTO kj_xj_gengzhengfenshu(yonghudaihao,caozuoshijian,kaoshiriqi,zhunkaozhenghao, xingming,kechengdaihao,yuanshifen,genggaifen,renyuanxinming,dengjihao,beizhu) VALUES(:yonghudaihao,to_date(:ldt_up_time,'yyyy-mm-dd hh24:mi:ss '),:is_kaoci,:ls_zkzh,:ls_xm,:ls_kcdh,:li_ysf,:li_gzf,:gstr_operator_trueName,:ls_djh,:ls_beizhu)
不带时分秒:

工作中要用到 Oracle 9i,经常要向其中的某张表插入事件发生的日期及时间。专门就 Oracle 的日期及时间显示方式和插入方式记一笔。
像 Number,varchar2 等内置的数据类型一样,Oracle 用 Date 这个内置的数据类型来存储日期和时间。和 MS SQL Server 一样,日期和时间是存储在一个数据类型里的,没有只存储时间或只存储日期的单独的时间和日期数据类型。DATE 数据类型存储年月日和时分秒。
当显示 DATE 类型的数据时,Oracle 先要把存储的值从内部保存格式转化为可输出的字符串。通常,这种转换是通过 TO_CHAR 这个函数来完成的。如果没有用 TO_CHAR 函数来指定特定的日期时间格式,Oracle 默认的显示格式是“DD-MON-YY”。
例如,我们创建了一个表 x:create table x(a int, b date);

然后我们执行下面的查询语句:select b from x;

我们会看到如下结果(set head on):B
------------
01-APR-08
(语言是英语)



B
-------------
01-四月 -08
(语言是中文)

也就是说,每次显示 DATE 类型的数值时,Oracle 会自动调用 TO_CHAR 函数,并以默认日期显示格式为参数。我们可以显式地调用 TO_CHAR 函数,并指定自己想要的格式。例如:
SELECT TO_CHAR(b, 'YYYY/MM/DD') AS b FROM x;
返回的结果是:
B
------------
2008/04/01

TO_CHAR 是个很强大的函数,可以把 Date,MLSLABEL,Number 类型的数据按指定的格式转换为VARCHAR2 类型的数据,我们在这里只关心日期时间的转换。语法:
TO_CHAR(d [, fmt [, 'nlsparams'] ])
d 是 Date 类型的变量,fmt 是我们指定的日期时间格式,如果不显式指定就用 Oracle 的默认值。 fmt 里常用的跟日期时间有关的占位符如下:
MM 用数字表示的月份(例如,07)
MON 缩写的月份名称(例如,JUL)
MONTH 完整的月份名称(例如,JULY)
DD 日期(例如, 24)
DY 星期几的缩写(例如,FRI)
YYYY 用4位表示的年份(例如, 2008)
YY 用2位表示的年份,取年份的后两位(例如,08)
RR 跟 YY 类似,但两位表示的年份被近似到 1950 到 2049 这个范围里的年份,例如 06 被认为是 2006,而不是 1906
AM (或 PM) 上下午指示符
HH 12进制表示的时间(1-12)
HH24 24进制表示的时间(0-23)
MI 分钟(0-59)
SS 秒(0-59)
以上讲的是利用 TO_CHAR 函数来显示 DATE 类型的数据,下面讲讲如何向表里插入一个 Date 类型的数值。这时我们要用到 TO_DATE 这个函数,把字符串表示的日期转换为 Date 类型。
跟 Oracle 显示日期时间时会隐性调用 TO_CHAR 函数一样,当 Oracle 期望一个 Date 类型的值时,它会隐性调用 TO_DATE 函数来转换输入的字符串,依据的默认格式是“DD-MON-YY”。
还是以我们的 x 表为例,我们可以直接输入:
insert into x values(99, '31-may-08');

但是,在显示时不管用什么格式都不会影响我们实际储存的数据;在插入时,单纯采用 Oracle 的默认格式就不是那么符合工作需要了,我们还是需要显式调用 TO_DATE 函数,例如:
insert into x values(99, to_date('2008/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));

TO_DATE 函数的语法:
TO_DATE(char [, fmt [, 'nlsparams'] ])
char 是表示日期和时间的字符串。fmt 的表示方法和 TO_CHAR 函数一样。
我们前面一直提到 Oracle 默认的日期时间格式是“DD-MON-YY”,其实,我们还可以修改这个默认格式,把它改成我们需要的格式。在 SQL*plus 里面输入下面的命令:
alter session set NLS_DATE_FORMAT=''; ——这个改变只对当前的会话(session)有用。
例如:
SQL> alter session set nls_date_format='yyyy-mm-dd';
会话已更改。
SQL> insert into x (b) values('2004-08-26');
已创建1行。

用 Oracle 内置的函数 SYSDATE 可以返回系统当前的日期和时间,例如:select to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS') as "Current Time" from dual;

Two interesting things to note here:
You can use double quotes to make names case sensitive (by default, SQL is case insensitive), or to force spaces into names. Oracle will treat everything inside the double quotes literally as a single name. In this example, if "Current Time" is not quoted, it would have been interpreted as two case insensitive names CURRENT and TIME, which would actually cause a syntax error. DUAL is built-in relation in Oracle which serves as a dummy relation to put in the FROM clause when nothing else is appropriate. For example, try "select 1+2 from dual;". Another name for the built-in function SYSDATE is CURRENT_DATE. Be aware of these special names to avoid name conflicts.
Operations on DATE You can compare DATE values using the standard comparison operators such as =, !=, >, etc.

You can subtract two DATE values, and the result is a FLOAT which is the number of days between the two DATE values. In general, the result may contain a fraction because DATE also has a time component. For obvious reasons, adding, multiplying, and dividing two DATE values are not allowed.
You can add and subtract constants to and from a DATE value, and these numbers will be interpreted as numbers of days. For example, SYSDATE+1 will be tomorrow. You cannot multiply or divide DATE values.
With the help of TO_CHAR, string operations can be used on DATE values as well. For example, to_char(, 'DD-MON-YY') like '%JUN%' evaluates to true if is in June.本回答被提问者采纳

如何向 Oracle 表中的 Date 字段插入日期及时间
如何向 Oracle 表中的 Date 字段插入日期及时间 Oracle中与sqlserver 插入日期型数据时,有比较大的区别。sqlserver中,直接把日期型数据用单引号括起来就可以,而Oracle却必须用to_date('',''')这种强类型转换函数显示转换为Date类型。例子(带时分秒):insert into table(j) values(to_date('200...

Oracle数据库,怎么让日期字段自动添加日期时间
在Oracle数据库,可以通过字段定义缺省值,实现在往表中插入数据时,如果不指定为该字段赋值,自动写入缺省值。示例:CREATE TABLE XXX(SUM_MONTH VARCHAR2(10) DEFAULT TO_CHAR(SYSDATE,'YYYYMM'),--缺省,设置数据月份 LOAD_DATE DATE DEFAULT SYSDATE--缺省,设置加载时间 );也可以通过修改已建的表...

oracle中如何插入date类型的数据
'yyyy-mm-dd')) ; -- 用to_dateinsert into tabname(datecol) value(to_date('2014-02-14 20:47:00','yyyy-mm-dd hh24:mi:ss')) ;

Oracle数据库,怎么让日期字段自动添加日期
在Oracle数据库,可以通过字段定义缺省值,实现在往表中插入数据时,如果不指定为该字段赋值,自动写入缺省值。示例:CREATE TABLE XXX(SUM_MONTH VARCHAR2(10) DEFAULT TO_CHAR(SYSDATE,'YYYYMM'),--缺省,设置数据月份 LOAD_DATE DATE DEFAULT SYSDATE--缺省,设置加载时间 );也可以通过修改已建的表...

oracle用sql 语句如何向表中插入时间?
如果是插入日期类型数据的话,先用to_date转换再插入就可以了。例:insert into 表(c_date) values(to_date('20120927 20:09:47','YYYYMMDD HH24:MI:SS'));

用TP向oracle的date类型 中插入日期怎么操作
data['create_time']=>array('exp',"to_date('".date('Y-m-d H:i:s')."','yy-mm-dd hh24:mi:ss')");M('xxx')->add($data);

在oracle中,如何插入数据类型为DATE的数据到新建表中?
把新建的表列的类型改为 date,就可以插入时间类型的数据

Oracle数据库插入日期型数据的方法
往Oracle数据库中插入日期型数据(to_date的用法)INSERT INTO FLOOR VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYYY-MM-DD HH24:MI:SS' ) ) ;查询显示:2007-12-20 18:31:34.0 --- INSERT INTO FLOOR VALUES ( to_date ( '2007-12-14 14:10' , 'YYYY-MM-DD HH24:MI'...

oracle中关于时间插入
插入的时候可以直接插sysdate 在查询的时候用to_char(columnName,'YYYY-MM-DD')='2007-08-21'就行了 或者你实在想插入日期而不插入时间的话 就先to_char 再to_date 往里插就行了,还有一种方法就是修改注册表oracle中的一个键值将其修改成YYYY-MM-DD这样 你数据库中所有的日期格式都是没有...

oracle中插入当前日期时间
用date类型就行了,用timestamp存的就是时间戳了,查询的时候可以用to_char(intime,'yyyy-mm-dd hh24:mi:ss')显示成你要的

相似回答