SQL server Date 数据类型(分类、内置函数等)

SQL server Date 数据类型

前言

在图书管理系统的练习中,想到可以通过日期筛选图书

然后又是因为用到了存储过程,所以时间操作必定要在数据库中完成

所以就简单的看了下 SQL server 的 Date 数据类型和相关的内置函数

Date分类

Date 数据类型可以分为一下几种:

数据类型 描述 样式 存储
date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 2020-04-15 3 bytes
time 仅存储时间。精度为 100 纳秒。 13:23:22.5333333 3-5 bytes
datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日
精度为 3.33 毫秒。
2020-04-15 13:24:16.920 8 bytes
datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日
精度为 100 纳秒。( datetime的升级版 )
2020-04-15 13:26:07.8100000 6-8 bytes
smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日
精度为 1 分钟。
2020-04-15 13:27:00 4 bytes
datetimeoffset 与 datetime2 相同
外加时区偏移。
2020-04-15 13:28:01.3133333 +00:00 8-10 bytes
timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。
timestamp 基于内部时钟,不对应真实时间。
每个表只能有一个 timestamp 变量。( 时间戳 )
0x0000000000000FA0

若需要手写日期类型,只需要按照样式的仿写然后用引号括起来即可

declare @timeDemo datetime
set @timeDemo = '2020-1-1 12:30:45.123'
select @timeDemo as timeDemo

会得到以下结果

timeDemo
2020-01-01 12:30:45.123

不过要注意,手写的内容必须合法,不然程序会报错!

Date映射关系

SQL 数据类型 .NET Framework 类型 System.Data.SqlDbType
date System.DateTime Date
time System.TimeSpan Time
datetime System.DateTime DateTime
datetime2 System.DateTime DateTime2
smalldatetime System.DateTime DateTime
datetimeoffset System.DateTimeOffset DateTimeOffset

内置函数

getdate()

getdate() 函数从 SQL Server 返回当前的时间和日期。

如使用如下语句

select getdate() as timeDemo

会得到以下结果

timeDemo
2020-04-15 13:41:33.317

datepart()

datepart() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

语法

datepart(datepart,date)

其中,date 参数是合法的日期表达式。datepart 参数可以是下列的值:

datepart 缩写
yy,yyyy
季度 qq,q
mm,m
年中的日 dy,y
dd,d
wk,ww
星期 dw,w
小时 hh
分钟 mi,n
ss,s
毫秒 ms
微秒 mcs
纳秒 ns

如使用如下语句

select datepart(yyyy,getdate()) as Year,
datepart(mm,getdate()) as Month,
datepart(dd,getdate()) as Day

会得到以下结果

Year Month Day
2020 4 15

dateadd()

dateadd() 函数在日期中添加或减去指定的时间间隔。

语法

dateadd(datepart,number,date)

date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。

datepart 参数上面已经介绍。

如使用如下语句

select dateadd(yy,1,'2020-1-1') as nextYear

会得到以下结果

nextYear
2021-01-01 00:00:00.000

datediff()

datediff() 函数返回两个日期之间的时间。

语法

datediff(datepart,number,date)

startdate 和 enddate 参数是合法的日期表达式。

datepart 参数上面已经介绍。

如使用如下语句

select datediff(dd,'2020-01-01','2020-01-02') as timeDiffer

会得到以下结果

timeDiffer
1

convert()

convert() 函数是把日期转换为新数据类型的通用函数。
convert() 函数可以用不同的格式显示日期/时间数据。

语法

convert(data_type(length),data_to_be_converted,style)

data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

style可以使用下列值

style ID style 格式
100 或 0 mon dd yyyy hh:miAM (或者 PM)
101 mm/dd/yy
102 yy.mm.dd
103 dd/mm/yy
104 dd.mm.yy
105 dd-mm-yy
106 dd mon yy
107 Mon dd, yy
108 hh:mm:ss
109 或 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110 mm-dd-yy
111 yy/mm/dd
112 yymmdd
113 或 13 dd mon yyyy hh:mm:ss:mmm(24h)
114 hh:mi:ss:mmm(24h)
120 或 20 yyyy-mm-dd hh:mi:ss(24h)
121 或 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130 dd mon yyyy hh:mi:ss:mmmAM
131 dd/mm/yy hh:mi:ss:mmmAM

如使用如下语句

select convert(varchar(20),getdate(),101) as date1,
convert(varchar(20),getdate(),112) as date2,
convert(varchar(30),getdate(),126) as date3

会得到以下结果

date1 date2 date3
04/15/2020 20200415 2020-04-15T14:31:43.143

Date 和 运算符

Date 类型是可以使用 = , > , < , >= 和 <= 等运算符的,时间越晚,数值越大

比如

我们比较两个时间的大小,就可以用 > 运算符

if('2020-01-01'>'2020-01-02')
	select 'Yse' as result;
else select 'No' as result;

结果如下

result
No

个人博客地址:johnnyzhao.com

posted @ 2020-04-15 15:09  永远爱范范的狗剩大人  阅读(559)  评论(0编辑  收藏  举报