在老大的书里面说过,日期用INT型存储。。具体的不知道怎么做。。
还有。日期用VARCHAR格式效率比较底。
请各位建议一下。日期怎么存储比较好!

解决方案 »

  1.   

    我用datetime
    smalldatetime
      

  2.   

    如果:日期用INT型存储的话,那就转换成 YYYYMMDD 的十进制格式,很显然在32位整形的表达范围内。
      

  3.   

    日期用INT型存储:
    declare @dt datetime set @dt = '2008-09-11'create table tb (.., thedate int, ..)
    insert into tb (thedate) values (@dt)
      

  4.   

    declare @dt datetime set @dt = getdate()declare @tb table (thedate int)
    insert into @tb values (cast(@dt as int))select *, cast(thedate as datetime) from @tb-- thedate
    -- 39701 2008-09-12 00:00:00.000
      

  5.   

    datetime不怎么好。。同一个服务器用不同的软件。软件的格式不同。这样就比较复杂了。
    我还是想看看INT是怎么存储。 
    而且时间也可以用INT存储。。但具体怎么操作还是不知道!!
      

  6.   


    嗯,日期用INT存储,表示成YYYYMMDD
      

  7.   


    --两个字段所占字节数并没什么区别。(以下从联机帮助复制)
    smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。SQL Server 将 smalldatetime 的值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。int
    从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。--个人认为,既然两种数据类型所占字节数一样,似乎没必要用int类型存储日期类型,而且用int类型存储,那样显示和运算的时候还要转换等等,这样性能方面且不是更差?
      

  8.   

    我不太赞同YYYYMMDD, 直接用cast(dt as int)保存更方便计算
      

  9.   


    我觉得日期型采用INT存储,不单单是考虑到字节大小问题,还有运算速度的问题.一切数据类型到了计算机的底层,全都是二进制. 相较於smalldatetime,varchar,INT的转换运算是最快的。
      

  10.   


    直接拿datetime cast成int?那样出来的数据不直观啦。
      

  11.   

    存在SQL中的数据不是用来给人看的,是给程序读的。既然采用INT存储就让程序更好计算。
    估计“老大的书里面说过,日期用INT型存储”是指系统内部的存储机制;
    如果需要,只保存日期(不含时间),就存储datetime的日期部分int值。这样,数据可以直接进行加减计算。
      

  12.   

    楼主朋友,我的看法是,如果查询或更新操作中有对大量日期的比较那么选择把日期INT类型是比较好的.因为比较的过程实际是个计算的过程,对于数值类型的数据计算起来是最快的.老大已经写了把日期类型转换为yyyymmdd或yymmdd的函数,可以直接引用.但是这样转化了的数据对于常规的时间操作显得有些不足.因为转化为整形的数据后,就不会在日期上进行月,日的判断了.所以稍不注意就会出现错误日期.这点需要特别注意.如果单纯用cast或convert函数转换,日期是一串非常不直观的数据,阅读起来很费解.
    所以,要根据自己的实际需要,自己衡量利弊后决定用哪种类型好.
      

  13.   

    SELECT CAST(GETDATE() as INT)
    -----
    39701如果需要,只保存日期(不含时间),就存储datetime的日期部分int值。这样,数据可以直接进行加减计算
    >这不就是YYYYMMDD了吗
      

  14.   

    对一般项目,实在没有必要用int去存储日期,用datetime就ok。
    1.可读性为0,特别对于一些和时间紧密相关的项目,用int存简直就是和自己找别扭。
    2.性能方面,系统处理datetime可能是存储和1900 年 1 月 1 日的时间差的int,
    但由此就打算采用int来存日期去和系统套近乎,似乎就没必要了。
    真要这样的话,你干嘛不把所有字段都用binary去存,这样机器就能更轻松的识别了。
    3.编程灵活性。datetime有许多有用的函数,你可以随时得到任一个datepart,
    datediff,dateadd等更是让你随心所欲。如果用int,你还得cast来cast去,
    把本来是系统自己能高效处理的事情硬要往自己身上揽,结果可想而知。
      

  15.   

    日期用INT型存储”是指系统内部的存储机制
      

  16.   

    日期型实际上存的是trick值。Microsoft SQL Server 用两个 4 字节的整数内部存储 datetime 数据类型的值。第一个 4 字节存储 base date(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参考日期。不允许早于 1753 年 1 月 1 日的 datetime 值。另外一个 4 字节存储以午夜后毫秒数所代表的每天的时间。smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。SQL Server 将 smalldatetime 的值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。
      

  17.   

    直接用datetime,smalldatetime 即可.日期和时间数据
    日期和时间数据由有效的日期或时间组成。例如,有效日期和时间数据既包括"4/01/98 12:15:00:00:00 PM",也包括"1:28:29:15:01 AM 8/17/98"。在 Microsoft® SQL Server™ 2000 中,日期和时间数据使用 datetime 和 smalldatetime 数据类型存储。使用 datetime 数据类型存储从 1753 年 1 月 1 日至 9999 年 12 月 31 日的日期(每个数值要求 8 个字节的存储空间)。使用 smalldatetime 数据类型存储从 1900 年 1 月 1 日至 2079 年 6 月 6 日的日期(每个数值要求 4 个字节的存储空间)。datetime 和 smalldatetime
    代表日期和一天内的时间的日期和时间数据类型。 datetime从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确度为百分之三秒(等于 3.33 毫秒或 0.00333 秒)。如下表所示,把值调整到 .000、.003、或 .007 秒的增量。示例 调整后的示例 
    01/01/98 23:59:59.999 1998-01-02 00:00:00.000 
    01/01/98 23:59:59.995,
    01/01/98 23:59:59.996, 
    01/01/98 23:59:59.997, 或
    01/01/98 23:59:59.998 1998-01-01 23:59:59.997 
    01/01/98 23:59:59.992, 
    01/01/98 23:59:59.993, 
    01/01/98 23:59:59.994 1998-01-01 23:59:59.993 
    01/01/98 23:59:59.990 或
    01/01/98 23:59:59.991 1998-01-01 23:59:59.990 
    Microsoft® SQL Server™ 拒绝所有其不能识别为 1753 年到 9999 年间的日期的值。smalldatetime从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据精确到分钟。29.998 秒或更低的 smalldatetime 值向下舍入为最接近的分钟,29.999 秒或更高的 smalldatetime 值向上舍入为最接近的分钟。--returns time as 12:35
    SELECT CAST('2000-05-08 12:35:29.998' AS smalldatetime)
    GO
    --returns time as 12:36
    SELECT CAST('2000-05-08 12:35:29.999' AS smalldatetime)
    GO注释
    Microsoft SQL Server 用两个 4 字节的整数内部存储 datetime 数据类型的值。第一个 4 字节存储 base date(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参考日期。不允许早于 1753 年 1 月 1 日的 datetime 值。另外一个 4 字节存储以午夜后毫秒数所代表的每天的时间。smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。SQL Server 将 smalldatetime 的值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。