sql日期函数

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

 
 
 

 

 

 

posted on 2013-03-21 10:07  快乐于行  阅读(479)  评论(0编辑  收藏  举报