oracle的字段没有时间类型,很麻烦啊

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
我有一些字段是只要时间的,因为怕其他程序员会写入日期,所以不太敢用date类型,只好用CHAR(6)加约束"BETWEEN '000000' AND '240000'"了

大家有什么好办法吗?:


回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
轉成時間格式
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
是害怕只写日期不写时间吧,
如果都写的话, 你也不用关心年月日部分是什么值呀, 只要取出时间部分的就可以了
还有你的约束的上限错了,是 '235959'
而且对字符串而言, 时间这样定, 没有办法准确的判断是有效时间
比如 '109999'显然在字符串的范围里, 但是它不是有效的时间
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
时间类型应该由前台控制是否输入的正确,不要由后台控制,而且最好定义成int类型,便于比较和查询,整型数据比较比字符型快很多的。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
建议把时间转成秒(to_number(to_char(...,'sssss')))存储,使用时若有必要再转回来。这样方便计算,约束也好加。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
有这种必要么?
在程序中直接写入 sysdate ,或者具体某个日期,届时你取出时间部分用就行了呗
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 jackywood 发布
[B]是害怕只写日期不写时间吧,
如果都写的话, 你也不用关心年月日部分是什么值呀, 只要取出时间部分的就可以了
还有你的约束的上限错了,是 '235959'
而且对字符串而言, 时间这样定, 没有办法准确的判断是有效时间
比如 '109999'显然在字符串的范围里, 但是它不是有效的时间 [/B]

这个时间列我要加唯一约束,如果是date类型,那么时间相同而日期不同的值就会跳过约束。所以我才不想用date类型的。


回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 MountLion 发布
[B]建议把时间转成秒(to_number(to_char(...,'sssss')))存储,使用时若有必要再转回来。这样方便计算,约束也好加。 [/B]

有道理,这么做就可以加约束了。只是这么来回转换效率怎么啊?


回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 zhangfan 发布
[B]
这个时间列我要加唯一约束,如果是date类型,那么时间相同而日期不同的值就会跳过约束。所以我才不想用date类型的。

[/B]

时间列加唯一约束??? 为什么?
难道说我今天三点整插入一条数据, 以后就永远都不能在三点这个时候插入一条数据了, 除非我把原来三点整的记录删除掉.
不同的时间刻度总共有24*60*60=86400种情况, 也就是说如果使用时间为唯一约束, 那么表中最大存储的记录数也就是86400, 这也是你希望得到的了
很怪的唯一约束, 能说说原因吗?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 jackywood 发布
[B]
时间列加唯一约束??? 为什么?
难道说我今天三点整插入一条数据, 以后就永远都不能在三点这个时候插入一条数据了, 除非我把原来三点整的记录删除掉.
不同的时间刻度总共有24*60*60=86400种情况, 也就是说如果使用时间为唯一约束, 那么表中最大存储的记录数也就是86400, 这也是你希望得到的了
很怪的唯一约束, 能说说原因吗? [/B]

其实是“时间”列与“客户标识”组成唯一约束。对每个客户,每天都要执行一项或者多项任务。比如某客户可以指定每天只执行一次(一条记录);也可以变态的指定每天执行86400次任务(86400条记录)。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行