sql时间小问题汇总

  做一个项目的时候经常会遇到各种各样的时间问题需要处理,有些函数经常会忘记,翻阅一些资料,加上自己的需求,简单的总结记忆一下基础知识,方便以后使用

 一.convert函数

      简单用法:     

  
  
  
  
  1. 查询某天的数据  
  2. 非:PublishTime=@PublishTime   
  3. 而应:select * from Meeting where convert(varchar(10),PublishTime,121))=@PublishTime 

      分析:比如为@PubilishTime提供参数‘2011-04-18’,经过抓花之后,实际上相当于查询PubilishTime=2011-04-18 00:00:00 ,从而不会得出真实的当天数据。

     注:convert一般用的也比较少,因为一般的时候时间列都建立有非聚集索引,convert函数会使数据库认为放弃按照时间索引的方式进行数据查询,在一些数据量非常大的数据表里,这种查询是非常影响性能的。

  时间的一些转换格式:

  
  
  
  
  1. select Convert(varchar(10),getdate(),120)  
  2. 2011-05-12  
  3.  
  4. select CONVERT(varchar, getdate(), 120 )  
  5. 2011-05-12 11:06:08  
  6.  
  7. select replace(replace(replace(CONVERT(varchar, getdate(),  
  8.  
  9. select CONVERT(varchar(12) , getdate(), 111 )  
  10. 2011/05/12  
  11.  
  12. select CONVERT(varchar(12) , getdate(), 112 )  
  13. 20110512  
  14.  
  15. select CONVERT(varchar(12) , getdate(), 102 )  
  16. 2011.05.12  
  17.  
  18.  select CONVERT(varchar(12) , getdate(), 103 )  
  19. 12/09/2004  
  20.  
  21. select CONVERT(varchar(12) , getdate(), 104 )  
  22. 12.05.2011  
  23.  
  24. select CONVERT(varchar(12) , getdate(), 105 )  
  25. 12-05-2011  
  26.  
  27. select CONVERT(varchar(12) , getdate(), 106 )  
  28. 12 05 2011  
  29.  
  30. select CONVERT(varchar(12) , getdate(), 108 )  
  31. 11:06:08  
  32.  
  33.  select CONVERT(varchar(12) , getdate(), 110 )  
  34. 09-12-2011  
  35.  

 二。简单一些函数

      (1)查询年.月.日   

  
  
  
  
  1. select year(getdate())--年  
  2. select month(getdate())--月  
  3. select day(getdate())--日 

       (2)查询每周的数据

  
  
  
  
  1. SELECT * FROM HW_SRDH WHERE datediff(week,SRSJ,getdate())=0 --本周数据
  2. SELECT * FROM HW_SRDH WHERE datediff(week,SRSJ,getdate())=1 --上周数据

     (3)日期加法

  
  
  
  
  1. select dateadd(month,2,getdate()) --加两月
  2. select dateadd(day,2,getdate())  --加两天

    (4)查询两端日期之间的天数 

  
  
  
  
  1. select datediff(day,'2011-09-01','2011-09-18')  

    (5)得到一个日期的年份

  
  
  
  
  1. SELECT DATEPART(year, '2004-10-15')  

    (6)返回平年还是闰年

  
  
  
  
  1. SELECT   
  2.    case   
  3.      day(dateadd(mm,  2,  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))))   
  4.      when  28    
  5.      then  '平年'   
  6.     else  '闰年'   
  7.  end 

     (7)返回指定日期是星期几。

  
  
  
  
  1. SELECT datename(weekday,  getdate()) 

      (8)返回当前日期是当年第多少周

  
  
  
  
  1. select 本年第多少周=datename(week, getdate()) 

       (9)

  
  
  
  
  1. --1.一个月第一天的    
  2. SELECT   DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0)    
  3.       
  4. --2.本周的星期一    
  5. SELECT   DATEADD(wk,   DATEDIFF(wk,0,getdate()),   0)    
  6.       
  7. select   dateadd(wk,datediff(wk,0,getdate()),6)    
  8. --3.一年的第一天    
  9. SELECT   DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)    
  10.       
  11. --4.季度的第一天    
  12. SELECT   DATEADD(qq,   DATEDIFF(qq,0,getdate()),   0)   

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(sql,数据库,时间函数,汇总,休闲)