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,G
ETDATE())),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 
 
--常用日期的视图 
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语句查询日期
-- 返回精确年龄 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 

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