傻傻的问题:SQL SERVER的数据类型的区别?(100分)

  • 主题发起人 主题发起人 蓝叶菱
  • 开始时间 开始时间

蓝叶菱

Unregistered / Unconfirmed
GUEST, unregistred user!
问题:<br>SQL SERVER的varbinary和时间类型的datetime,timestamp有什么区别?<br>我见过一个程序,没有使用datetime,或者timestamp为什么呢,最后使用的是varbinary。难道考虑的是varbinary可以存储更多的数据?<br>问题:<br>作为财务或者货币运算类型的时候,使用什么字段呢?<br>是使用money还是decinal呢?那个更合适?<br>decinal(12,4),money?为什么呢?
 
不懂 我是新来的!介绍一下怎么入门呗 一点基础都没,列如里面的英文都什么意思之类的,想学学!
 
财务软件用来存储金额的字段类型是整数类型,是int!很意外吧,哈哈!!<br>我曾经在国内第三大财务软件公司工作过,所以我知道。<br>比如你的金额是12.80元,那么乘于100,12.80×100 = 1280,数据库里面存的是1280,<br>取出来显示的时候再除于100就是12.80元了。
 
我做的系统,一般时间类型取smalldatetime+varchar(5),分别存放日期和时间,如:2008-4-1 15:30这种形式。分开两个字段的好处,我个人认为是便于查询统计。<br>钱的话,我一般直接用money。在前台控制输入的小数位数,后台计算结果保留两位小数,round(money, 2)就可以了。<br>timestamp没用过
 
时间当然应该用datetime型了<br>datetime实际存放的是浮点值,精确到3.33毫秒,而smalldatetime精确到分钟<br>timestamp不能存时间的,引自联机丛书:timestamp 数据类型只是递增的数字,不保留日期或时间。若要记录日期或时间,请使用 datetime 数据类型。<br>Corn3 用两个字段存精确到分钟的值,可以说第二个字段完全是多余的.<br><br>货币运算一般用money,也有用decimal的,但decimal比money要多占存储空间,而且精度定义可变,不如money统一的好.<br>man8888 说的用int/100代表金额,这样做起来很麻烦,而且国际上金额是要精确到1%分的,4位小数
 
datetime实际就是double,如果时间比较特殊,如为了计算方便全部换算成以ms为单位的整数,则用其他类型保存起来可能比较方便。<br><br>数据的类型和范围决定字段类型。
 
老蓝都老鸟了,还问这样的问题。<br><br>timestamp跳过,如果不考虑规范,datetime都可以省略成float了。<br><br>就像用整型表达money一样让人觉得可笑,但是人家可能有自己的苦衷而采用了这样不规范的方式,肥羊高手,说得很明白,money可以表达0.0001元,估计int不行吧,要做到可能整个程序都得改成 除10000,还有四舍五入的问题...<br><br>以前在foxpro时代也经常看到 year,month,date的3个字段,说是统计方便,觉得也是情有可原,在sql上面还拆成3个字段甚至加上一个time,就觉得有点罪无可敕了。<br><br>decinal(12,4),money 的差别,我认为:money应该永远不会返回一个这样的数值吧:1.2345 E12,我猜的。如果用FLOAT在SQL某种格式会自动写成科学记数法的格式,decinal没试过,不敢说。<br><br>说到底还是规范的问题,老外这个做得很好,觉得值得学习。<br><br>老蓝最近也少看到你发话了,调侃你一下,别介意啊,我也不认为你的水平这么低,可能你没说清楚关键的东西吧?
 
嗯,之前我们也做过一个大型的ERP系统,用Int代替了DateTime型
 
每次插入或更新包含 timestamp 列的行时,timestamp 列中的值均会更新,timestamp为什么使用它,不知道有什么想法。<br><br>难道decimal(12,2)比money更浪费空间?我已经指定了长度啊。我不这么像。当时我更多的是考虑中国的货币精确到小数后两位,所以没有使用MONEY。。<br><br>关于datetime我错了,<br>但是为什么有个字段使用varbinary?我感觉奇怪。这个字段的名字是modifydate,似乎是时间,但是为什么没有使用datetime呢?<br>至于联机帮助什么我在看,但是不甚明白。
 
sql我进入很早,但我还是门外汉,因为我在小地方做开发,应用的范围不是很广,我说说我的看法啊,不要笑话啊。<br><br>我觉得timestamp 类似于 identity,但是包含了当时的时间信息,这个是从名字妄自推断的,因为timestamp好像叫做 时间戳 (邮戳的意思明白?),如果你做邮件系统你觉得需要些什么信息来做这个唯一id?<br><br>decimal好像是动态的长度,没有自动四舍五入。我刚看了一下,money固定 8个字节,表达19位有效数字,固定小数点后面4位精度,而且四舍五(5.1)入。而decimal同样也可以表到19.4,但是需要9个字节,12.2也是9个字节,只有到9.x才用5个字节。不过我觉得没有四舍五入,确实很遗憾。<br>不过讨论用几个字节、是否节省空间好像有点腐迂。<br>另人民币实际也是要精确到小数后4位的,最好的例子就是标准汇率都是4位。至于在应用中显示2位,大家都这么做,好像跟money的4位特性没什么关系吧?<br><br>字段使用varbinary来表达时间我觉得是程序本身的问题,也许可能需要精度比较高的要求吧或者是加密需要(varbinary好像没法直接browser);而如果是为了节省空间,我就觉得有点多余,datetime才8个字节,如果varbinary低于8位,好像没有应用的必要,因为4位的int来描述时间(不包含日期),精度可以达到20us。<br>总的来说,觉得这个本身就不是很规范。
 
多人接受答案了。
 
后退
顶部