导航
  • 主页
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
  • 职位交流
  • 问答

如何取得一个日期类型的值?

zahuifan 2004-10-09 05:02:41
听说日期类型的数据在数据库中是以一个整形值的形式存储的,比如 1856-4-3 是 31287。
是不是有什么函数可以把一个日期转换成那个整形值?
...全文
179 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
storm_huang 2004-10-14
update 学生@sql
set 生日 = To_char(生日, 'yyyy-mm-dd')
where id = 1

update 学生@sql
set 生日 = To_char(生日, j)
where id = 1
回复
zahuifan 2004-10-14
To smallcrocodile(大鳄鱼):
其实是这样的:

我在 Oracle 中已经成功建立了到 SQLServer 的数据连接。
我的 SQL Server 数据库中有一个表[学生],它有一个字段[生日]是日期型的。
我在 SQL Plus 中,想
update 学生@sql
set 生日 = '1980-5-1'
where id = 1
出错。

改成:
update 学生@sql
set 生日 = 1980-5-1
where id = 1
也不行

我也试了:
update 学生@sql
set 生日 = To_Date('1980-5-1', 'yyyy-mm-dd')
where id = 1
还是出错。

只有:
update 学生@sql
set 生日 = 31287
where id = 1
不出错,于是我就想能不能先把 Oracle 中的日期转换为整数再赋值给 SQL Server 的日期字段。
回复
smallcrocodile 2004-10-13
楼主就有点杞人忧天了!
你不要管他是不是以整数存储的,你只要把他当日期数据正确读取出来就是了,其实真正是二进制代码了,你还会去研究怎么样把二进制代码转化为你要的类型数据呀
回复
tanyun1111 2004-10-13
up
回复
jack_4826 2004-10-12
楼主也够可以的啦,
select sysdate-to_date('1899-12-30','yyyy-mm-dd') from dual;
详解如下
把上面的sysdate改为
select to_date('2004-10-01','yyyy-mm-dd')-to_date('1899-12-30','yyyy-mm-dd') from dual
结果返回整数为38261
如果你非得要函数,那么你可以自己把什么得语句封装成函数,不要告诉我你不会写函数啊
^_^

回复
wylwyl1130 2004-10-12
select to_date('1856-4-3','YYYY-MM-DD')-31287 from dual;

TO_DATE('1856-4-3','YYYY-MM-DD

1770-8-5

即,系统以1770-8-5为基准,每增加一天日期标示+1,如:1770-8-6,为1,1770-8-7,为2

select to_date('1856-4-3','YYYY-MM-DD')-to_date('1770-8-5','yyyy-mm-dd') from dual;
TO_DATE('1856-4-3','YYYY-MM-DD

31287


以此类推:20041001 的值为:
85524



回复
Jackyhou2004 2004-10-12
我也想知道这个问题的答案,但楼上几位答非所问阿。楼主是说,一个date类型的数据在数据库里面用哪个整数表示。1856-4-3 是 31287,那么2004-10-01是什么?估计也是一个5位的整数把,有没有函数让这个日期对应的整数显示出来,这是需要解决的问题。看楼上几个的答案真觉得.......
回复
jack_4826 2004-10-12
首先日期形式是以float型存储的,整数表示天,小数表示一天中的已过的小时数(当然需要转换为10进制),并且绝大多数系统都是以1899-12-30 00:00:00时间为起点0,所有就可以这样转换
日期转换为实数
select sysdate-to_date('1899-12-30','yyyy-mm-dd') from dual;

实数转换为日期
select xxx.xxx+to_date('1899-12-30','yyyy-mm-dd') from dual;

如果是整数加上trunc函数即可
回复
zmgowin 2004-10-11
db2中知道可以用days实现,oracle找了一下还没找到
回复
dinya2003 2004-10-11
好象是有这么个说法,关注......
回复
freddy2003 2004-10-11
楼上的各位,有没有看清题目?
回复
cheng7634 2004-10-09
ding
回复
wylwyl1130 2004-10-09
select sysdate+30 from dual

日期后面+数字,是加的天数
回复
bzszp 2004-10-09
17:03:04 SQL> select to_date('1770-08-05','yyyy-mm-dd')+31287 from dual;

TO_DATE('1770-08-05
-------------------
1856-04-03 00:00:00

已用时间: 00: 00: 00.16
17:04:32 SQL>
回复
发动态
发帖子
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
社区公告
暂无公告