zoukankan      html  css  js  c++  java
  • SQL中常用的日期计算

    计算哪一天是本周的星期一
    SELECT DATEADD(week, DATEDIFF(week,'1900-01-01',getdate()), '1900-01-01')     --返回2011-07-25 00:00:00.000

    SELECT DATEADD(week, DATEDIFF(week,0,getdate()),0)   

      

    当前季度的第一天

    SELECT DATEADD(quarter, DATEDIFF(quarter,0,getdate()), 0)     —2011-07-01 00:00:00.000

    一个季度多少天

    declare @m tinyint,@time smalldatetime

    select @m=month(getdate())
    select @m=case when @m between 1 and 3 then 1
                           when @m between 4 and 6 then 4
                           when @m between 7  and 9 then 7
                           else 10 end

    select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01'
    select datediff(day,@time,dateadd(mm,3,@time))              —返回92

    --A. 年的第一天
    SELECT CONVERT(char(5),GETDATE(),120)+'1-1'

    --B. 年的最后一天
    SELECT CONVERT(char(5),GETDATE(),120)+'12-31'

    --A. 季度的第一天
    SELECT CONVERT(datetime,
       CONVERT(char(8),
           DATEADD(Month,
               DATEPART(Quarter,GETDATE())*3-Month(GETDATE())-2,
               GETDATE()),
           120)+'1')

    --B. 季度的最后一天(CASE判断法)
    SELECT CONVERT(datetime,
       CONVERT(char(8),
           DATEADD(Month,
               DATEPART(Quarter,GETDATE())*3-Month(GETDATE()),
               GETDATE()),
           120)
       +CASE WHEN DATEPART(Quarter,GETDATE()) in(1,4)
           THEN '31'ELSE '30' END)

    --C. 季度的最后一天(直接推算法)
    SELECT DATEADD(Day,-1,
       CONVERT(char(8),
           DATEADD(Month,
               1+DATEPART(Quarter,GETDATE())*3-Month(GETDATE()),
               GETDATE()),
           120)+'1')

    --A. 月的第一天
    SELECT CONVERT(datetime,CONVERT(char(8),GETDATE(),120)+'1')

    --B. 月的最后一天
    SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,GETDATE()),120)+'1')

    --C. 月的最后一天(容易使用的错误方法)
    SELECT DATEADD(Month,1,DATEADD(Day,-DAY(GETDATE()),GETDATE()))

    --4.指定日期所在周的任意一天
    SELECT DATEADD(Day,@number-DATEPART(Weekday,GETDATE()),GETDATE())


    --5.指定日期所在周的任意星期几
    --A.  星期天做为一周的第1天
    SELECT DATEADD(Day,@number-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

    --B.  星期一做为一周的第1天
    SELECT DATEADD(Day,@number-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-2)%7-1,GETDATE())

    1.一个月第一天的
    Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

    2.本周的星期一
    Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

    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)

    1.显示本月第一天
    SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
    select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)

     
    2.显示本月最后一天
    select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))
    SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))

     
    3.上个月的最后一天  

    SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))

     
    4.本月的第一个星期一
    select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)

     
    5.本年的第一天
    SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)

     
    6.本年的最后一天
    SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))

     
    7.去年的最后一天
    SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))

     
    8.本季度的第一天
    SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)

     
    9.本周的星期一
    SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)

     
    10.查询本月的记录
    select * from tableName where DATEPART(mm, theDate)=DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

     
    11.查询本周的记录
    select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

     
    12查询本季的记录 注:其中:GETDATE()是获得系统时间的函数。
    select * from tableName where DATEPART(qq, theDate) = DATEPART(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

    13.获取当月总天数:
    select DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate()))

    select datediff(day,dateadd(mm, datediff(mm,'',getdate()), ''),dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))
    -------------------------------------
    SELECT   32-day(getdate()+(32-Day(getdate())))


    14.获取当前为星期几

    select datepart(weekday,getdate())

    select   DATENAME(weekday,getdate())

    select a as 星期, getdate() as 日期
     from(select a='星期一',b=1
      union all select '星期二',2 union all select '星期三',3
      union all select '星期四',4 union all select '星期五',5
      union all select '星期六',6 union all select '星期日',0
     )a where b = (datepart(weekday,getdate())-1)

  • 相关阅读:
    SCU 3133(博弈)
    SCU 3132(博弈)
    hdu 5183(hash)
    hdu3329(2次dfs)
    hdu5179(数位dp)
    zoj2314(有上下界的网络流)
    CF 519E(树上倍增求lca)
    hdu1251(Trie树)
    SCU 2009(数位dp)
    【Leetcode】Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/QiuJL/p/4524349.html
Copyright © 2011-2022 走看看