sql server 查詢日期中的常用語句, 例如本周第一天, 年內的第幾周,有用


--本周第一天   
SELECT  DATEADD( Day ,1-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())  
--or   
select  dateadd(wk, datediff(wk,0,getdate()), 0)  
--本周第一天   
select  dateadd(wk, datediff(wk,0,getdate()), 6)  
   
--上月第一天   
SELECT  CONVERT ( CHAR (10),DATEADD( month ,-1,DATEADD(dd,- DAY (GETDATE())+1,GETDATE())),111)  
--上月最后一天   
SELECT  CONVERT ( CHAR (10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),111)+ ' 23:59:59'  
--本月第一天   
select  dateadd(dd,-datepart(dd,getdate())+1,getdate())  
--本月最后一天   
select  dateadd(dd,-datepart(dd,getdate()) ,dateadd(mm,1,getdate()))  
--本月天數   
select  datediff(dd,dateadd(dd,-datepart(dd,getdate())+1,getdate()), dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate())))  
--or   
select  datepart(dd,dateadd(dd,-1,dateadd(mm,1, cast ( cast ( year (getdate())  as  varchar )+ '-' + cast ( month (getdate())  as  varchar )+ '-01'  as  datetime))))  
   
--下月第一天   
select  dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate()))  
--下月最后一天   
SELECT  CONVERT ( CHAR (10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+ ' 23:59:59'  
--季度第一天   
SELECT    DATEADD(qq,   DATEDIFF(qq,0,getdate()),   0)   
--季度最后一天(直接推算法)   
SELECT  DATEADD( Day ,-1, CONVERT ( char (8),DATEADD( Month ,1+DATEPART(Quarter,getdate())*3- Month (getdate()),getdate()),120)+ '1' )  
--季度的最后一天(CASE判斷法)   
select  DATEADD( Month ,DATEPART(Quarter,getdate())*3- Month (getdate()),getdate())  
   
--本月第一個星期一   
SELECT  DATEADD(wk, DATEDIFF(wk,  '' , DATEADD(dd, 6 -  DAY (getdate()), getdate())),  '' )   
--去年最后一天   
SELECT    dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))   
--今年第一天   
SELECT    DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)   
--今年最后一天   
SELECT   dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0))  
   
--指定日期所在周的任意一天   
SELECT  DATEADD( Day ,@number-DATEPART(Weekday,@dt),@dt) --5.指定日期所在周的任意星期幾   
--A.  星期天做為一周的第1天   
SELECT  DATEADD( Day ,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)  
--B.  星期一做為一周的第1天   
SELECT  DATEADD( Day ,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)  
---周內的第幾日   
select  datepart(weekday,getdate())  as  周內的第幾日  
--年內的第幾周   
select  datepart(week,getdate())  as  年內的第幾周  
--年內的第幾季   
select  datepart(quarter,getdate())  as  年內的第幾季  
   
   
--判斷某天是當月的第幾周的sql函數    
CREATE    FUNCTION    WeekOfMonth(@ day  datetime)     
RETURNS  int  
AS   
begin  
   
----declare @day datetime   
declare  @num  int  
declare  @Start datetime  
declare  @dd  int  
declare  @dayofweek  char (8)  
declare  @dayofweek_num  char (8)  
declare  @startWeekDays  int  
---set @day='2009-07-05'   
if datepart(dd,@ day )=1  
return  1  
else  
set  @Start= ( SELECT    DATEADD(mm,   DATEDIFF(mm,0,@ day ),   0))  --一個月第一天的   
set  @dayofweek= (datename(weekday,@Start))  ---得到本月第一天是周幾   
set  @dayofweek_num=( select  ( case  @dayofweek  when  '星期一'  then  2  
when  '星期二'  then  3  
when  '星期三'  then  4  
when  '星期四'  then  5  
when  '星期五'  then  6  
when  '星期六'  then  7  
when  '星期日'  then  1  
end ))  
set  @dayofweek_num= 7-@dayofweek_num+1  ---得到本月的第一周一共有幾天   
---print @dayofweek_num   
    set  @dd=datepart(dd,@ day ----得到今天是這個月的第幾天   
--print @dd   
if @dd<=@dayofweek_num  --小於前一周的天數   
return  1  
else   
set  @dd=@dd-@dayofweek_num  
if @dd % 7=0  
      begin  
        set  @num=@dd / 7  
         return  @num+1  
          
      end  
    else  --if @dd % 7<>0   
      
      set  @num=@dd / 7  
set  @num=@num+1+1  
        return  @num  
end  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM