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小时内删除。
发表评论