zoukankan      html  css  js  c++  java
  • sql server 2008 offer 4 kinds of date datatypes [ZT]

    在mssql 9.0 以前,只有2种日期的数据类型,长短日期型。现在,即将在三月份正式发布的版本将支持DATE, TIME, DATETIMEOFFSET and DATETIME2.

    DATE
    很多人都比较迷惑在不需要日期精确的情况下却存储了许多不应该存储的。比如你只需要精确到日期,却不需要小时分秒,但是目前的日期类数据类型却不允许这样,如果转成char型,也是很不值得。
    一条这样的语句:
    SELECT * FROM tblDate Where datediff(d,[Date],‘2007-10-01’) =0
    会让你很是郁闷,违反一个基本准则:等号左边操作列。索引用不上不说,还要每次都计算。
    (当然这个实现还是可以多样的,你可以使用Between and 来绕弯实现利用索引的。原文举例的是这个语句)

    但是如果有只是存储整数部分的日期就好了。2008版的date类型就是你想要的!
    (补充一下:mssql里面对日期类型的存储是这样的:将日期部分存储成一个整数,将日期的后面的屁股存储成小数部分,然后拼加在一起存在数据库内是一个类似于float类型的数据。具体可以演练这样一段代码:
    select convert(float,getdate())
    select datediff(day,0,getdate())
    select dateadd(day,0,datediff(day,0,getdate()))
    select convert(float,dateadd(day,0,datediff(day,0,getdate())))
    select convert(float,getdate()-dateadd(day,0,datediff(day,0,getdate())))

    附带:date的取值范围是0001-01-01 到9999-12-31

    TIME
    这个类型也就顾名思义其实就是刚才date类型的尾巴,取值范围是00:00:00.0000000 到23:59:59.9999999

    DATETIME2
    这个类型是让你可以指定时间的精确度,比如:
    DECLARE @dt7 datetime2(7)

    SET @dt7 = Getdate()

    PRINT @dt7

    --result is 2008-01-3 12:15:11.2340000
    他一共可以指定从0到7的小数点位数,具体参考如下:

    Fraction

    Output

    0

    2007-10-28 22:11:20

    1

    2007-10-28 22:11:19.7

    2

    2007-10-28 22:11:19.70

    3

    2007-10-28 22:11:19.703

    4

    2007-10-28 22:11:19.7030

    5

    2007-10-28 22:11:19.70300

    6

    2007-10-28 22:11:19.703000

    7

    2007-10-28 22:11:19.7030000


    DATETIMEOFFSET
    主要是针对时区来的,可以在时间上加上时区。例如:
    DECLARE @dt DATETIMEOFFSET(0)

    SET @dt = '2007-10-29 22:50:55 -1:00'

     

    DECLARE @dt1 DATETIMEOFFSET(0)

    SET @dt1 = '2007-10-29 22:50:55 +5:00'

    SELECT DATEDIFF(hh,@dt,@Dt1)

    个人感觉用处不是很大。

    如果需求需要将日期和时间都分别存储,并且分别建立索引,甚至是联合索引,那么如何得到一个真正的时间呢?
    Declare @dt as DATE

    Set @dt = getdate()

    Declare @dtt as TIME

    Set @dtt = getdate()

    Select cast(@dt as smalldatetime)  + cast(@dtt as smalldatetime)

    Output: 
    2007-10-28 00:17:00.  




    参考自:http://www.sql-server-performance.com/articles/dev/datetime_2008_p1.aspx
  • 相关阅读:
    c++语言特性深究
    springmvc和springboot的差别
    c++11新的大特性
    C/C++编程笔记:C语言进制详解,二进制、八进制和十六进制!
    程序人生丨想学编程,大学什么样的专业能成为一名真正的程序员?
    C/C++编程笔记:C语言预处理命令是什么?不要以为你直接写#就行!
    盘点:中国“颜值+才华”的几位知名女程序员!如何看待女生当程序员?
    程序人生丨三种语言实现—用户登录界面随机验证码,源代码分享!
    自学编程,为何你始终不能学出效果?切记一定要避免这 8 大误区!
    第二批《中等职业学校专业教学标准(试行)》目录
  • 原文地址:https://www.cnblogs.com/RobotTech/p/1026454.html
Copyright © 2011-2022 走看看