博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server 2008 offer 4 kinds of date datatypes
阅读量:6804 次
发布时间: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/

你可能感兴趣的文章
基于WinSvr2012共享文件夹的Hyper-V实时迁移之二文件服务器及迁移用虚拟机的创建...
查看>>
linux运行级别0-6的各自含义(考试题答案系列)
查看>>
buffer 与cache 的区别
查看>>
Exchange邮箱数据库事务日志引起磁盘暴涨
查看>>
通过帮网友解答问题训练同学们使用awk,sed案例
查看>>
统计客户端连接数
查看>>
OSSIM中主动与被动探测工具(arpwatch+p0f+pads)组合应用
查看>>
腾讯微博等7家网站实行实名制
查看>>
分布式日志收集系统实践(视频教程)
查看>>
业界大佬患互联网手机焦虑症 圈地运动骤然爆发
查看>>
拍拍二手重装上阵,京东剑指闲鱼胜算几何?
查看>>
看看其实挺心酸的。
查看>>
实操总结:小程序裂变0成本获客3要素
查看>>
ARM给服务器厂商更多创新机会
查看>>
[2011 年终项目总结] 第六章、网站测试
查看>>
找到7天内要过生日的记录
查看>>
获取桌面DC: GetDC(GetDesktopWindow())与GetDC(NULL)
查看>>
Objective-C 基础,类和对象,方法和消息,已声明的属性和存取方法,块对象,协议和范畴类,预定义类型和编码策略...
查看>>
NDK编译时指定NDK_MODULE_PATH的方法
查看>>
解决Android 应用运行报Unable to resolve superclass of L错误
查看>>