博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server 2008 offer 4 kinds of date datatypes
阅读量:6805 次
发布时间:2019-06-26

本文共 1868 字,大约阅读时间需要 6 分钟。

在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

转载地址:http://oqjwl.baihongyu.com/

你可能感兴趣的文章
报错stale element reference: element is not attached to the page document结局方案
查看>>
Redis源代码剖析--对象object
查看>>
【感悟】——人生路,昂首走
查看>>
Testbench
查看>>
HNOI2015题解
查看>>
【项目实战】多线程环境下正确创建单例
查看>>
linux centos 7 nodejs 的安装
查看>>
mssqlserver分区表的左值与右值
查看>>
推荐系统
查看>>
HoloLens | 世界的每一次变化,其实都提前打好了招呼
查看>>
seq命令
查看>>
线性表接口的实现_Java
查看>>
利用安卓手机搭建WEB服务器
查看>>
小巧玲珑:机器学习届快刀XGBoost的介绍和使用
查看>>
intellij开发安卓与genymotion配合
查看>>
jmeter大神博客笔记
查看>>
java.lang.NoClassDefFoundError: javax/annotation/Priority
查看>>
skimage的安装,scikit-image
查看>>
springmvc-mvc:resource标签使用
查看>>
如何理解php的依赖注入
查看>>