• sql日期操作收集


    DECLARE @dt datetime
    SET @dt=GETDATE()

    DECLARE @number int
    SET @number=3

    --1.指定日期该年的第一天或最后一天
    --A. 年的第一天
    SELECT CONVERT(char(5),@dt,120)+'1-1'

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


    --2.指定日期所在季度的第一天或最后一天
    --A. 季度的第一天
    SELECT CONVERT(datetime,
        CONVERT(char(8),
            DATEADD(Month,
                DATEPART(Quarter,@dt)*3-Month(@dt)-2,
                @dt),
            120)+'1')

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

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


    --3.指定日期所在月份的第一天或最后一天
    --A. 月的第一天
    SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')

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

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


    --4.指定日期所在周的任意一天
    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)


    --获取上周的第一天 和最后一天
    declare @dt datetime
    declare @firstday datetime
    declare @lastday datetime
    set @dt=dateadd(day,-7,getdate())
    select @dt = dateadd(Day,1-(datepart(Weekday,@dt)+@@datefirst-2)%7-1,@dt)
    set @firstday = cast(convert(char(10),@dt,120) +' 00:00:00' as datetime)
    select @lastday  = cast(convert(char(10),dateadd(day,6,@dt),120)+' 23:59:59' as datetime)
    select @firstday,@lastday

    --昨天的时间范围
    select cast(convert(char(10),dateadd(day,-1,getdate()),120) + ' 00:00:00' as datetime)
    select cast(convert(char(10),dateadd(day,-1,getdate()),120) + ' 23:59:59' as datetime)

    --1.获取今天的开始时间和最后时间
    --2.获取昨天的开始时间和最后时间
    --3.获取上周的开始时间和最后时间
    --4.获取上月的开始时间和最后时间
    declare @dt datetime
    declare @firstdate1 datetime,@lastdate1 datetime
    declare @firstdate2 datetime,@lastdate2 datetime
    declare @firstdate3 datetime,@lastdate3 datetime
    declare @firstdate4 datetime,@lastdate4 datetime

    set @dt = getdate()
    set @firstdate1 = cast(convert(char(10),getdate(),120) + ' 00:00:00' as datetime)
    set @lastdate1 = cast(convert(char(10),getdate(),120) + ' 23:59:59' as datetime)
    --select @firstdate1,@lastdate1

    set @dt = dateadd(day,-1,getdate())
    set @firstdate2 = cast(convert(char(10),@dt,120) + ' 00:00:00' as datetime)
    set @lastdate2 = cast(convert(char(10),@dt,120) + ' 23:59:59' as datetime)
    --select @dt,@firstdate2,@lastdate2

    set @dt = dateadd(day,-7,getdate())
    set @dt = dateadd(day,-(datepart(weekday,@dt) -2),@dt)
    set @firstdate3 = cast(convert(char(10),@dt,120) + ' 00:00:00' as datetime)
    set @lastdate3 = cast(convert(char(10),dateadd(day,6,@dt),120) + ' 23:59:59' as datetime)
    --select @dt,@firstdate3,@lastdate3

    set @dt = getdate()
    set @firstdate4 = cast(convert(char(8),@dt,120) +'01 00:00:00' as datetime)
    set @lastdate4 = dateadd(month,1,@firstdate4)
    --select @dt,@firstdate4,@lastdate4


    专注iOS、Android、Java、Golang开发等涉及开发管理相关。 技术博客:http://xiaopin.cnblogs.com
  • 相关阅读:
    【Codechef】Chef and Bike(二维多项式插值)
    USACO 完结的一些感想
    USACO 6.5 Checker Challenge
    USACO 6.5 The Clocks
    USACO 6.5 Betsy's Tour (插头dp)
    USACO 6.5 Closed Fences
    USACO 6.4 Electric Fences
    USACO 6.5 All Latin Squares
    USACO 6.4 The Primes
    USACO 6.4 Wisconsin Squares
  • 原文地址:https://www.cnblogs.com/xiaopin/p/2163549.html
Copyright © 2020-2023  润新知