中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > Informix
冲光明使者:datetime类型简介(yc)
作者:未知 时间:2005-09-13 19:04 出处:ChinaUnix.net 责编:chinaitpower
              摘要:冲光明使者:datetime类型简介(yc)

[b:4e4a86ea5c]datetime类型简介:[/b:4e4a86ea5c]
一个datetime型的字段可以存储的日期范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒。 
如果你不需要覆盖这么大范围的日期和时间,你可以使用SMALLDATETIME型数据。它与datetime型数据同样使用,只不过它能表示的日期和时间

范围比datetime型数据小,而且不如datetime型数据精确。一个SMALLDATETIME型的字段能够存储从1900年1月1日到2079年6月6日的日期,它只

能精确到秒。

[b:4e4a86ea5c]datetime数据类型的操作:[/b:4e4a86ea5c]
1、日期的截取:
用extend截取日期的部分值,如:
start_time='2004-06-15 11:12:13'
本文以下出现的start_time均为datetime year to second
extend(start_time,year to month)='2004-06'
extend(start_time,hour to hour)='11'
要说明的是:以上函数返回的'2004-06'和'11'的类型仍然都是datetime型,无法直接进行加减操作。
2、日期的计算:
应用中经常会用到日期的加减,比如取当前日期的前一天或指定日期的前一天等,
这种操作不好说,还是看看下面的例子说明问题:
select 
curretn 
current year to day - interval(9) day to day,
current year to second - interval(9) minute to minute
from tab1
将会返回:
2004-06-13 19:30:42.000 
2004-06-04   
2004-06-13 19:21:42
不知这样大家明白没。

[b:4e4a86ea5c]类型转换:[/b:4e4a86ea5c]
前文提到的extend(start_time,hour to hour)='11'的结果仍然是datetime型,如果要进行类型转换的话:
1、extend(start_time,hour to hour)||''将返回char型,extend(start_time,hour to 

hour)||''+0将返回integer型,extend(start_time,hour to hour)||''+0.0将返回float型,虽然样子不太好看,不过效果不错,呵呵。对了

,忘记说的是:类似extend(start_time,hour to hour)||''+0这样的方法可以在select中使用,但在create view的时候使用则会发生语法错

误(IDS 9.4)。
2、用to_char函数:
to_char(start_time)将按原样返回start_time字段的字符形式,如:
SELECT TO_CHAR(start_time, '%A %B %d, %Y %R') FROM tab1 
结果是: 
Wednesday July 23, 2003 18:45 
其中: 
%A:周、%B:月(英文)、%m月(数字)、%d:日、%Y:年,%R:时间。 
按照以上方法,大家可以将日期时间型按照自己喜欢的形状进行加工。
(IDS 9.4)
3、to_date函数:
用法类似于to_char,如:
to_date('20040615111213','%Y%m%d%H%M%S')
将返回一个datetime型:
2004-06-15 11:12:13.00000


暂时先想到这么多了,自己对datetime的操作一直不太理解,这次算强迫自己去了解,有不对的大家一定要补充下啊,我们一起来把这个小小的专题完善起来,方便大家查把。

 czw1413_cn 回复于:2004-06-13 20:08:54
8错
大家继续顶.....

 jackaychen 回复于:2004-06-13 22:29:05
如何精确到毫秒级?急切要答案!

 amiescort 回复于:2004-06-14 10:10:27
[quote:4538e9a35c="jackaychen"]如何精确到毫秒级?急切要答案![/quote:4538e9a35c]
谢谢你的提醒,在datetime中有一个精确到毫秒的方法,使用fraction,如:
datetime year to fraction(3)将会建立一个精确到微秒的时间字段。至于微秒级别的时间加减操作,之前米有做过,所以目前还不很清楚,待我查查资料,尽快回复。

 amiescort 回复于:2004-06-14 10:31:59
晕s~~
查了资料,才知道datetime的操作真是5花8门,下面是一个简单的例子,不知能否符合要求:
create table tmp_time (test_time datetime year to fraction(3));  
insert into tmp_time values('2004-06-15 11:12:13.145');  
select test_time,extend(test_time,year to fraction(3)) - interval(0.312) second to fraction(3)  from tmp_time;
结果是(IDS 9.3):
2004-06-15 11:12:13.145 
2004-06-15 11:12:12.833

 JimmyWuMr 回复于:2004-12-13 20:38:22
如何给datetime的字段设置默认值,如下为什么不可以:
alter table t dt_time datetime year to second default '2004-01-01
00:00:00'

 carefen 回复于:2004-12-13 21:58:03
[quote:0a0e63df6b="JimmyWuMr"]如何给datetime的字段设置默认值,如下为什么不可以:
alter table t dt_time datetime year to second default '2004-01-01
00:00:00'[/quote:0a0e63df6b]

语法错误啊

应该是:
alter table tab_name modify(dt_time datetime year to second default '2004-01-01 00:00:00');

 zzjijun 回复于:2004-12-14 10:46:11
顶!

 carefen 回复于:2004-12-14 10:50:26
amiescort老大回去后,很久没来CU了

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有