在图书管理系统的练习中,想到可以通过日期筛选图书
然后又是因为用到了存储过程,所以时间操作必定要在数据库中完成
所以就简单的看了下 SQL server 的 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 |
不过要注意,手写的内容必须合法,不然程序会报错!
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() 函数从 SQL Server 返回当前的时间和日期。
如使用如下语句
select getdate() as timeDemo
会得到以下结果
timeDemo |
---|
2020-04-15 13:41:33.317 |
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(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(datepart,number,date)
startdate 和 enddate 参数是合法的日期表达式。
datepart 参数上面已经介绍。
如使用如下语句
select datediff(dd,'2020-01-01','2020-01-02') as timeDiffer
会得到以下结果
timeDiffer |
---|
1 |
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 类型是可以使用 = , > , < , >= 和 <= 等运算符的,时间越晚,数值越大
比如
我们比较两个时间的大小,就可以用 > 运算符
if('2020-01-01'>'2020-01-02')
select 'Yse' as result;
else select 'No' as result;
结果如下
result |
---|
No |
个人博客地址:johnnyzhao.com