oracle中如何直接输入oracle 日期类型转换

如何向&Oracle&表中的&Date&字段插入日期及时间
&Oracle中与sqlserver
插入日期型数据时,有比较大的区别。sqlserver中,直接把日期型数据用单引号括起来就可以,而Oracle却必须用to_date('',''')这种强类型转换函数显示转换为Date类型。
例子(带时分秒):
insert&into&&table(j)&values(to_date('&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”。
例如,我们创建了一个表
create table x(a int, b date);
然后我们执行下面的查询语句:
我们会看到如下结果(set
------------
(语言是英语)
-------------
01-四月 -08
(语言是中文)
也就是说,每次显示 DATE 类型的数值时,Oracle
会自动调用&TO_CHAR&函数,并以默认日期显示格式为参数。我们可以显式地调用&TO_CHAR&函数,并指定自己想要的格式。例如:
SELECT TO_CHAR(b, 'YYYY/MM/DD') AS b FROM
返回的结果是:
------------
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 类型。
显示日期时间时会隐性调用&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(':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('');
已创建1行。
Oracle 内置的函数 SYSDATE 可以返回系统当前的日期和时间,例如:
select to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS') as "Current Time"
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". 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
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数据类型插入格式
以插入今天的日期为例,TAB_NAME为表名,
DATE_COL为日期字段,提供两种方式:&
INSERT INTO TAB_NAME(DATE_COL) VALUES(SYSDATE); &
INSERT INTO TAB_NAME(DATE_COL) VALUES(TO_DATE
('','YYYY-MM-DD'));
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'5918人阅读
Oracle 11g(3)
INSERT INTO Agents VALUES (10041, 'Kai', 'Marcoux', '', '');
使用如上语句插入时提示文字与格式字符串不匹配,
INSERT INTO Agents VALUES (10235, 'Tobias', 'Carling', '19-Dec-00', '19-Oct-75');
使用如上格式插入时提示无效的月份
使用to_date函数
************to_date函数参数简介***********
******************************************
对于你的问题
'' 改为 to_date('','yyyy-mm-dd')
'' 改为 to_date('','yyyy-mm-dd')
'19-Dec-00' 改为 to_date('19-Dec-00','dd-mon-yy')
'19-Oct-75' 改为 to_date('19-Oct-75','dd-mon-yy')
之后直接插入即可。
**************oracle上的实验**************
SQL& select to_char(sysdate,'yyyy-mm-dd')
TO_CHAR(SY
----------
SQL& select to_char(sysdate,'dd-mon-yy')
******************************************
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:22846次
排名:千里之外
转载:31篇
(9)(1)(10)(12)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(4197)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'在oracle sql 中处理日期大全(转)',
blogAbstract:'from:
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}oracle 数据类型详解---日期型
&&&&& oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:注:由于INTERVAL及TIME ZONE实际用得比较少,所以本文内容未涉及这两个方面。
1、常用日期型数据类型1.1、DATE这是ORACLE最常用的日期类型,它可以保存日期和时间,常用日期处理都可以采用这种类型。DATE表示的日期范围可以是公元前日至公元日date类型在数据库中的存储固定为7个字节,格式为:&第1字节:世纪+100&第2字节:年&第3字节:月&第4字节:天&第5字节:小时+1&第6字节:分+1&第7字节:秒+1
1.2、TIMESTAMP(p)这也是ORACLE常用的日期类型,它与date的区别是不仅可以保存日期和时间,还能保存小数秒,小数位数可以指定为0-9,默认为6位,所以最高精度可以到ns(纳秒),数据库内部用7或者11个字节存储,如果精度为0,则用7字节存储,与date类型功能相同,如果精度大于0则用11字节存储。格式为:&第1字节:世纪+100&第2字节:年&第3字节:月&第4字节:天&第5字节:小时+1&第6字节:分+1&第7字节:秒+1&第8-11字节:纳秒,采用4个字节存储,内部运算类型为整形
注:TIMESTAMP日期类型如果与数值进行加减运算会自动转换为DATE型,也就是说小数秒会自动去除。
1.3、DATE与TIMESTAMP类型内部存储验证
&&&C1&DATE,
&&&t(c1,c2)&(date,);
&&&t(c1,c2)&(
&&&&&&&&to_date(,),
&&&&&&&&to_timestamp(,)
&SQL&&c1,(c1)&c1_d,c2,(c2)&c2_d&&t;
C1&&&&&&&&&&&&&&&&&&&&&& C1_D&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C2_D------------------------ ---------------------------------------- ---------------------------------------- -----------------------------------------------------&&&&&&&&&&&&&&& Typ=12 Len=7: 120,110,2,12,1,1,1&&&&&&&& 12-FEB-10 01.24.52. PM&&&&&&&&& Typ=180 Len=11: 120,110,2,12,14,25,53,13,244,111,203 上午 10:20:30& Typ=12 Len=7: 120,110,2,12,11,21,31&&&&& 12-FEB-10 01.24.52. PM&&&&&&&&& Typ=180 Len=11: 120,110,2,12,14,25,53,7,91,202,0
以下是为了测试是为了验证TIMESTAMP的小数位存储算法:
1&SQL&&select&c2,dump(c2,16)&c2_d16&from&t;
C2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C2_D16---------------------------------------- --------------------------------------------------------------------------------12-FEB-10 01.24.52. PM&&&&&&&&& Typ=180 Len=11: 78,6e,2,c,e,19,35,d,f4,6f,cb12-FEB-10 01.24.52. PM&&&&&&&&& Typ=180 Len=11: 78,6e,2,c,e,19,35,7,5b,ca,0
SQL&&select&to_number('0df46fcb','xxxxxxxx')&mydata1,to_number('075bca00','xxxxxxxx')&mydata2&from&
&&& MYDATA1&&& MYDATA2---------- ----------&&
2、常见问题2.1、如何取当前时间sysdate--返回当前系统日期和时间,精确到秒systimestamp--返回当前系统日期和时间,精确到毫秒2.2、如何进行日期运算日期型数据可以与数值加减得到新的日期,加减数值单位为天sysdate+1--取明天的当前时间sysdate-1/24--取当前时间的前一个小时
SQL&&select&sysdate&d1,sysdate+1&d2,sysdate-1/24&d3&from&
D1&&&&&&&&&&&&&&&&&&&&&& D2&&&&&&&&&&&&&&&&&&&&&& D3------------------------ ------------------------ ------------------------ 下午 10:55:16&
下午 10:55:16&
下午 09:55:16
2.3、如何求两个日期的间隔时间可以直接把两个日期相减,返回的单位为天,小时及分秒会换算成小数
SQL&&select&date''-sysdate&from&
&DATE''-SYSDATE------------------------&&&&&&& 597.
2.4、如何将日期转字符to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')2.5、如何将字符转日期to_date(' 15:01:54','YYYY-MM-DD HH24:MI:SS')to_timestamp(' 11:00:00.123456','YYYY-MM-DD HH:MI:SS.FF6')
3、常用日期函数3.1、TO_CHAR(DATE,FORMATSTR)--格式化日期成字符
SQL&&select&to_char(sysdate,'YYYY-MM-DD&HH24:MI:SS')&d1&from&
&D1------------------------ 22:56:38
TO_CHAR的其它用法示例
&SQL&&TO_CHAR(date&,&)&week_dayth,&TO_CHAR(date&,&)&month_dayth,&TO_CHAR(date&,&)&year_dayth,&TO_CHAR(date&,&)&weekdayname,&_(date&,&)&month_weekth,&TO_CHAR(date&,&)&year_weekth&&DUAL;
WEEK_DAYTH MONTH_DAYTH YEAR_DAYTH WEEKDAYNAME MONTH_WEEKTH YEAR_WEEKTH---------- ----------- ---------- ----------- ------------ -----------6&&&&&&&&& 12&&&&&&&&& 043&&&&&&& FRIDAY&&&&& 2&&&&&&&&&&& 07
3.2、TO_DATE(CHAR,FORMATSTR) --将字符转换成日期to_date(' 15:01:54','YYYY-MM-DD HH24:MI:SS')格式备注:HH表示12小时进制,HH24表示采用24小时进制,MM表示月份,MI表示分钟。
3.3、TRUNC(DATE)--返回DATE的日期部分,时间为0点0分0秒
SQL&&select&sysdate&d1,trunc(sysdate)&d2&from&
&D1&&&&&&&&&&&&&&&&&&&&&& D2------------------------ ------------------------ 下午 10:59:18&
3.4、EXTRACT(DATA FROM DATEVALUE)--返回DATE的某一部份内容&如果DATEVALUE为DATE类型,则DATA可以是(YEAR、MONTH、DAY)&如果DATEVALUE为TIMESTAMP类型,则DATA可以是(YEAR、MONTH,DAY、HOUR、MINUTE、SECOND)
SQL&&select&sysdate&d1,EXTRACT(YEAR&FROM&sysdate)&thisyear,EXTRACT(MINUTE&FROM&systimestamp)&thism&from&
&D1&&&&&&&&&&&&&&&&&&&&&&&& THISYEAR&&&&& THISM------------------------ ---------- ---------- 下午 11:05:06&&&&&&& 2010&&&&&&&&& 53.5、ADD_MONTHS(DATE,MONTHS) --在DATE增加月份得到新日期
ADD_MONTHS(sysdate,3) --当前日期加3个月ADD_MONTHS是一个比较有意思的函数,它会自动处理大小月及闰月,如下所示
&&&SQL&&ADD_MONTHS(date&,&),
&&&ADD_MONTHS(date&,&),
&&&ADD_MONTHS(date&,&),
&&&ADD_MONTHS(date&,&)
&ADD_MONTHS(DATE'',1) ADD_MONTHS(DATE'',1) ADD_MONTHS(DATE'',1) ADD_MONTHS(DATE'',1)----------------------------- ----------------------------- ----------------------------- -----------------------------&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&
3.6、LAST_DAY(DATE)--返回日期所在月份的最后一天日期
SQL&&select&LAST_DAY(date&'')&from&
&LAST_DAY(DATE'')-------------------------&3.7、NEXT_DAY(DATE,CHAR) --从给定日期开始返回下个CHAR指定星期的日期
SQL&&SELECT&NEXT_DAY(date'',&'MONDAY')&NEXTDAY1,NEXT_DAY(date'',&'MONDAY')&NEXTDAY2&FROM&DUAL;
&NEXTDAY1&&& NEXTDAY2----------- -----------&&
TO_YMINTERVAL(CHAR)--返回[年-月]格式构成的时间间隔,一般用于日期加减运算
3.8、TO_DSINTERVAL(CHAR)--返回[天 时:分:秒]格式构成的时间间隔,一般用于日期加减运算
SQL&&select&date''+TO_YMINTERVAL('01-02')&newdate&from&
&NEWDATE------------------------------
3.9、NUMTOYMINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算char可以为YEAR,MONTH
&SQL&&date&&&NUMTOYMINTERVAL(,&)&newdate1,
&date&&&NUMTOYMINTERVAL(,&)&newdate2
&NEWDATE1&&& NEWDATE2----------- -----------&&
3.10、NUMTODSINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算char可以为DAY,HOUR,MINUTE,SECOND
&SQL&&date&&&NUMTODSINTERVAL(,&)&newdate1,
&date&&&NUMTODSINTERVAL(,&)&newdate2
&NEWDATE1&&& NEWDATE2----------- ------------------------&&
上午 01:00:00
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区}

我要回帖

更多关于 oracle 日期时间类型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信