博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql日期函数
阅读量:4969 次
发布时间:2019-06-12

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

  在MSSQLServer中可以用字符串来表示日期时间类型,数据库系统会自动在内部将它们转换为日期时间类型,比如“'2008-08-08'”、“2008-08-08 08:00:00”、“08:00:00” 、“2008-08-08 08:00:00.000000”等。

1.日期、时间、日期时间、时间戳

     Date:日期是用来表示“年-月-日”信息的数据类型,其精度精确到“日”,其中包含了年、月、日三个信息,比如“2008-08-08”。

     时间是用来表示“小时:分:秒” 信息的数据类型,其精度精确到“秒”,其中包含了小时、分、秒三个信息,比如“19:00:00”。

     DateTime:日期时间是用来表示“年-月-日 小时:分:秒” 信息的数据类型,其精度精确到“秒”,其中包含了年、月、日、小时、分、秒六个信息,比如“2008-08-08 08:00:00”。

      TimeSpan:日期时间的精度精确到“秒”,这在一些情况下能够满足基本的要求,但是对于精度要求更加高的日期时间信息则无法表示。数据库中提供了时间戳类型用于表示这些对精度要求更加高的场合。时间戳类型还可以用于标记表中数据的版本信息,比如我们想区分表中两条记录插入表中的先后顺序,由于数据库操作速度非常快,如果用DateTime类型记输入插入时间的话,若两条记录插入的时间间隔非常短的话是无法区分它们的,这时就可以使用时间戳类型。在有的数据库系统中,如果对数据表中的记录进行了更新的话,数据库系统会自动更新其中的时间戳字段的值。

2.取得当前日期时间 :GateDate()

select getdate() as 当前日期时间

3.日期增减 :DateAdd()

     DateAdd() 函数在日期中添加或减去指定的时间间隔。DateAdd(datepart,number,date)。

     datepart 参数可以是下列的值:

                                             

     number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。

     date 参数是合法的日期表达式。

select dateadd(d,2,getdate()) as 后天此刻

4.计算一个日期是星期几:DateName()

     DateName有两个参数:datepart,date。其中datepart于DateAdd一样,只不过DateAdd用于对日期的某个部分(part)进行操作,而DateName是进行获取。

select datename(yyyy,getdate()) as 年,datename(m,getdate()) as 月,datename(d,getdate()) as 日

     如果使用Weekday(或者使用别名dw)做为datepart参数调用DATENAME()函数就可以得到一个日期是星期几。

select datename(dw,getdate()) as 星期--结果:星期二

     可见这个函数可以返回一个日期的特定部分,并且尽量用名称来表述这个特定部分。

5.取得日期的指定部分:DatePart()

     DatePart (datepart,date):参数datepart指定要返回的日期部分的参数,同上。其中参数date为待计算日期,date 参数也可以是日期格式的字符串。

     粗看起来,DATEPART()函数和DATENAME()函数完全一样,不过其实它们并不是只是名称不同的别名函数,虽然都是用来提取日期的特定部分的,不过DATEPART()函数的返回值是数字而DATENAME()函数则会将尽可能的以名称的方式做为返回值。

select datename(dw,getdate()) as 星期--结果:星期二select datepart(dw,getdate()) as 星期--3

     结果不同,因为周日是一个星期的第一天。

6.DateDiff() 函数返回两个日期之间的差值

     语法:

DATEDIFF(datepart,startdate,enddate)

     其中datepart同上,startdate为开始时间,enddate为结束时间。startdate可以大于enddate.

SELECT datediff(yy,'2000-1-1','2010-1-1') AS DiffYear,datediff(m,'2000-1-1','2010-1-1') AS DiffMonth,datediff(dd,'2000-1-1','2010-1-1') AS DiffDate

7.day(), month(),year() 

SELECT     day(getdate()),    month(getdate()),    year(getdate())

8.使用Convert()取得DateTime格式数据

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE(), 1): 05/16/06Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AMSelect CONVERT(varchar(100), GETDATE(), 10): 05-16-06Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16Select CONVERT(varchar(100), GETDATE(), 12): 060516Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AMSelect CONVERT(varchar(100), GETDATE(), 23): 2006-05-16Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE(), 101): 05/16/2006Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AMSelect CONVERT(varchar(100), GETDATE(), 110): 05-16-2006Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16Select CONVERT(varchar(100), GETDATE(), 112): 20060516Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AMSelect CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

9.当月的第一天 

select  dateadd(mm,datediff(mm,0,getdate()),0)

     0表示:“1900-01-01 00:00:00.000”。datediff(mm,0,getdate())可以得到当前日期到“1900-01-01 00:00:00.000”直接相差的月份。然后用“1900-01-01 00:00:00.000”这个时间+相差的月份。就可以得到当前月的第一天。

10.本周的星期一

select dateadd(wk,datediff(wk,0,getdate()),0)

11.一年的第一天

select  dateadd(yy,datediff(yy,0,getdate()),0)

12.当天的半夜

select  dateadd(dd,datediff(dd,0,getdate()),0)

13.本月最后一天

select dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0))

14.本月的第一个星期一

select  dateadd(wk,datediff(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0)

 15.某月的天数

select  datediff(day,'2003-2-15','2003-3-15')
select  day(dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)))

16.判断是否是润年

select    case     day(dateadd(mm,2,dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))))   when  28      then  '平年'     else  '闰年'   end                      select  case    datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01'))  when  28   then  '平年'  else  '闰年'   end

 

如何实现只显示本月信息

sql="select * from [table] where datediff(m,date,Now())=0"

 

sql 查询本周本月

 

---求相差天数   

select   datediff(day,'2004-01-01',getdate())       
     
--1.一个月第一天的   
SELECT   DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0)   
     
--2.本周的星期一   
SELECT   DATEADD(wk,   DATEDIFF(wk,0,getdate()),   0)   
     
select   dateadd(wk,datediff(wk,0,getdate()),6)  

--3.一年的第一天   

SELECT   DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)   
     
--4.季度的第一天   
SELECT   DATEADD(qq,   DATEDIFF(qq,0,getdate()),   0)   
     
--5.当天的半夜   
SELECT   DATEADD(dd,   DATEDIFF(dd,0,getdate()),   0)   
     
--6.上个月的最后一天   
SELECT   dateadd(ms,-3,DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0))   
     
--7.去年的最后一天   
SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0))   
     
--8.本月的最后一天   
SELECT   dateadd(ms,-3,DATEADD(mm,   DATEDIFF(m,0,getdate())+1,   0))   
     
--9.本年的最后一天   
SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate())+1,   0))   
     
--10.本月的第一个星期一   
select   DATEADD(wk,   
DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),   0)

--查询本周注册人数   

select   count(*)   from   [user]   
where   datediff(week,create_day-1,getdate())=0   
     
--上周注册人数   
select   count(*)   from   [user]   
where   datediff(week,create_day-1,getdate())=1   
     
     
--本月注册人数   
select   count(*)   from   [user]   
where   datediff(month,create_day,getdate())=0   
     
--上月注册人数   
select   count(*)   from   [user]   
where   datediff(month,create_day,getdate())=1   
   
--如果要效率,这样写查询   
     
--查询本周注册人数   
select   count(*)   from   [user]   
where   create_day>=dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))   
and   create_day<dateadd(day,9-datepart(weekday,getdate()),convert(varchar,getdate(),112))   
     
--上周注册人数   
select   count(*)   from   [user]   
where   create_day>=dateadd(day,-5-datepart(weekday,getdate()),convert(varchar,getdate(),112))   
and   create_day<dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))   
     
     
--本月注册人数   
select   count(*)   from   [user]   
where   create_day>=dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))   
and   create_day<dateadd(month,1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))   
     
--上月注册人数   
select   count(*)   from   [user]   
where   create_day>=dateadd(month,-1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))   
and   create_day<dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))   
   
--本周   
select   count(*)   from   User   
where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate())   
         
--上周   
select   count(*)   from   User   
where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7   
     
--本月   
select   count(*)   from   User   
where   datepart(mm,create_day)   =   datepart(mm,getdate())  

--上月   

select   count(*)   from   User   
where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1

--本周   

select   count(*)   from   [User]   
where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate())   
         
--上周   
select   count(*)   from   [User]   
where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7   
     
--本月   
select   count(*)   from   [User]   
where   datepart(mm,create_day)   =   datepart(mm,getdate())   
--上月   
select   count(*)   from   [User]   
where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1 
学习   
month(create_day)=month(getdate())本月   
month(create_day)=month(getdate())-1   上月

补充 查询今日所有的

SELECT * from feedback WHERE (DATEDIFF(d,fedtime,GETDATE())=0) ORDER BY fedid DESC

 
 
 
 
 

 

 

转载于:https://www.cnblogs.com/automation/archive/2013/03/21/2972657.html

你可能感兴趣的文章
机电行业如何进行信息化建设
查看>>
9、总线
查看>>
Git 笔记 - section 1
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>