SQL Server 中 关于时间 类型的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 中 关于时间 类型的区别相关的知识,希望对你有一定的参考价值。
date datetime datetime2(7) datetimeoffset(7) time timestamp
1、首先获取当前系统数据库的日期和时间,可以利用函数GETDATE(),select GETDATE();如下图所示。
2、获取当前世界标准时间的日期时间值,利用GETUTCDATE()函数,select GETUTCDATE();如下图所示。
3、然后select DATEADD(DAY,1,'2015-5-11');在指定的时间增加一天。
4、在指定的时间增加两年,select DATEADD(YEAR,2,'2015-03-17')。
5、最后datediff函数计算两个时间相差值,第一个参数是按照单位计算差值,分,小时,秒,天,月,年,都可以。
参考技术A 直接从每个类型定义就可以看出区别:date、time、datetime三个类型直接从意思上可以理解,date是日期,time是时间,datetime是日期跟时间。“()”里面的数字是表示长度。
datetime2数据类型,类似于之前的datetime类型,不过其精度比较高,可以精确到小数点后面7位(100ns);
datetimeoffset数据类型,加入了时区偏移量部分,时区偏移量表示为 [+|-] HH:MM。 HH 是范围从 00 到 14 的 2 位数,表示时区偏移量的小时数。 MM 是范围从 00 到 59 的 2 位数,表示时区偏移量的附加分钟数。 时间格式支持到最小 100 毫微秒。 必需的 + 或 - 符号指示在 UTC(通用协调时间或格林尼治标准时间)中是加上还是减去时区偏移量以获取本地时间。使用示例:
'2008-08-08 08:08:08.0 +8:00'
timestamp
timestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节。本回答被提问者采纳 参考技术B
以SQLServer2008为例
日期时间类型
date:日期
time:时间
datetime:时间+日期,有效时间范围1753/1/1~9999/12/31,精确到3.33ms。
datetime2[(n)]:是精度可以改变的时间+日期,当然是指改变时间的精度啦
smalldatetime:结果类似于datetime,但是还是有区别的,smalldatetime的有效时间范围1900/1/1~2079/6/6,精确到分钟。
datetimeoffset
DATE2017-09-19
TIME
09:05:09.2670000
DATETIME
9 19 2017 9:05AM
DATETIME2可以设置精度
DATETIME2
2017-09-19 09:05:09.2670000
DATETIME2(5)
2017-09-19 09:05:09.26700
SMALLDATETIME
9 19 2017 9:05AM
DATETIMEOFFSET
2017-09-19 09:05:09.2670000 +00:00
输出上面的源码
DECLARE @dt AS DATESET @dt=GETDATE()
PRINT 'DATE';
PRINT @dt;
/*2017-09-19*/
DECLARE @dt2 AS TIME
SET @dt2=GETDATE()
PRINT 'TIME';
PRINT @dt2;
/*08:49:53.7830000*/
DECLARE @dt3 AS DATETIME
SET @dt3=GETDATE()
PRINT 'DATETIME';
PRINT @dt3;
/*9 19 2017 8:50AM*/
PRINT 'DATETIME2可以设置精度';
DECLARE @dt4 AS DATETIME2
SET @dt4=GETDATE()
PRINT 'DATETIME2';
PRINT @dt4;
/*2017-09-19 09:16:03.6300000*/
DECLARE @dt5 AS DATETIME2(5)
SET @dt5=GETDATE()
PRINT 'DATETIME2(5)';
PRINT @dt5;
/*2017-09-19 08:53:03.63000*/
DECLARE @dt7 AS SMALLDATETIME
SET @dt7=GETDATE()
PRINT 'SMALLDATETIME';
PRINT @dt7;
/*9 19 2017 8:55AM*/
DECLARE @dt8 AS DATETIMEOFFSET
SET @dt8=GETDATE()
PRINT 'DATETIMEOFFSET';
PRINT @dt8;
/*2017-09-19 08:55:54.5770000 +00:00*/
SQL SERVER中强制类型转换cast和convert的区别
参考技术A 几乎一样,但是convert比cast多了个style可以让转换结果变成指定的显示样式
以下是网上找到的参考资料
sql中的cast
和convert都是用来将一种数据类型的表达式转换为另一种数据类型的表达式。cast
和
convert
提供相似的功能,只是语法不同。在时间转化中一般用到convert,因为它比cast多加了一个style,可以转化成不同时间的格式。
一、语法:
1、使用
cast
cast
(
expression
as
data_type
)
2、使用
convert
convert
(data_type[(length)],
expression
[,
style])
3、参数说明
expression
是任何有效的表达式。
data_type:
目标系统所提供的数据类型,包括
bigint
和
sql_variant。不能使用用户定义的数据类型。
length
nchar、nvarchar、char、varchar、binary
或
varbinary
数据类型的可选参数。
style
日期格式样式,借以将
datetime
或
smalldatetime
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar
或
nvarchar
数据类型);或者字符串格式样式,借以将
float、real、money
或
smallmoney
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar
或
nvarchar
数据类型)。
二、cast和convert的代码示例
sql
代码
复制
select
cast('123'
as
int)
--
123
select
convert(int,
'123')
--
123
select
cast(123.4
as
int)
--
123
select
convert(int,
123.4)
--
123
select
cast('123.4'
as
int)
select
convert(int,
'123.4')
--
conversion
failed
when
converting
the
varchar
value
'123.4'
to
data
type
int.
select
cast('123.4'
as
decimal)
--
123
select
convert(decimal,
'123.4')
--
123
select
cast('123.4'
as
decimal(9,2))
--
123.40
select
convert(decimal(9,2),
'123.4')
--
123.40
declare
@num
money
set
@num
=
1234.56
select
convert(varchar(20),
@num,
0)
--
1234.56
select
convert(varchar(20),
@num,
1)
--
1,234.56
select
convert(varchar(20),
@num,
2)
--
1234.5600
三、convert函数的style参数说明
1、date
和
time
样式
不带世纪数位
(yy)
带世纪数位
(yyyy)
输入/输出
-
0
或
100
mon
dd
yyyy
hh:miam(或
pm)
1
101
1
=
mm/dd/yy
101
=
mm/dd/yyyy
2
102
2
=
yy.mm.dd
102
=
yyyy.mm.dd
3
103
3
=
dd/mm/yy
103
=
dd/mm/yyyy
4
104
4
=
dd.mm.yy
104
=
dd.mm.yyyy
5
105
5
=
dd-mm-yy
105
=
dd-mm-yyyy
6
106
6
=
dd
mon
yy
106
=
dd
mon
yyyy
7
107
7
=
mon
dd,
yy
107
=
mon
dd,
yyyy
8
108
hh:mi:ss
-
9
或
109
mon
dd
yyyy
hh:mi:ss:mmmam(或
pm)
10
110
10
=
mm-dd-yy
110
=
mm-dd-yyyy
11
111
11
=
yy/mm/dd
111
=
yyyy/mm/dd
12
112
12
=
yymmdd
112
=
yyyymmdd
-
13
或
113
dd
mon
yyyy
hh:mi:ss:mmm(24h)
14
114
dd
mon
yyyy
hh:mi:ss:mmm(24h)
-
20
或
120
yyyy-mm-dd
hh:mi:ss(24h)
-
21
或
121
yyyy-mm-dd
hh:mi:ss.mmm(24h)
-
126
yyyy-mm-ddthh:mi:ss.mmm(无空格)
-
127
yyyy-mm-ddthh:mi:ss.mmmz(无空格)
-
130
dd
mon
yyyy
hh:mi:ss:mmmam
-
131
dd/mm/yyyy
hh:mi:ss:mmmam
2、float
和
real
样式
值
输出
0(默认值)
最多包含
6
位。
根据需要使用科学记数法。
1
始终为
8
位值。
始终使用科学记数法。
2
始终为
16
位值。
始终使用科学记数法。
3、money
和
smallmoney
样式
值
输出
0
小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如
4235.98。
1
小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如
3,510.92。
2
小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如
3,510.92。
126
转换为
char(n)
或
varchar(n)
时,等同于样式
2
以上是关于SQL Server 中 关于时间 类型的区别的主要内容,如果未能解决你的问题,请参考以下文章