sql日期语句大全
    --本周第一天
增加字段的sql语句
    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)+ 2
3: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(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())), ) --去年最后一天
    selectdateadd(ms,-3,dateadd(yy, datediff(yy,0,getdate()), 0))
    --今年第一天
    selectdateadd(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函数
    createfunctionweekofmonth(@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= (selectdateadd(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 
    --常用日期的视图
    select  convert(varchar(10), getdate(), 120) as today, replace(convert(varchar(8), getdate(), 108), :, ) as time,
    replace(replace(replace(convert(varchar, getdate(), 120), -, ),  , ), :, ) as all_date, convert(varchar(12), getdate(), 112) as date,
    year(getdate()) as year, month(getdate()) as month, day(getdate()) as day, convert(varchar(8), dateadd(d, - 1, getdate()), 112)
    as yestaday, convert(varchar(8), dateadd(d, 1, getdate()), 112) as tomorrow
    from 
    /*
    t-sql: 17 个与日期时间相关的自定义函数(udf),周日作为周的最后一天,均不受 @@datefirst、语言版本影响
    提示:
    (@@datefirst + datepart(weekday,@date)) % 7 判断周几是最保险的! 与 @@datefirst 无关,与语言版本无关
    @@datefirst 可能会导致 datepart(weekday,@date) 不一样!
    无论 @@datefirst 等于几,无论是什么语言版本的 sql server 下面永远恒成立!
    (@@datefirst + datepart(weekday,@date))%7 : 2、3、4、5、6、0、1 分别代表 周一 到 周日
    -- */ 
    create function udf_getage(@startdate datetime,@enddate datetime)
    returns integer
    -- 返回精确年龄 select dbo.udf_getage(1949-10-01,getdate())
    begin
    return datediff(year,@startdate,@enddate)
    - case when datediff(day,dateadd(year,datediff(year,@startdate,@enddate),@startdate),@enddate) >= 0 then 0

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。