资源描述
(完整版)与日期有关sql大全
1. 与日期有关sql 大全
2.-—本周第一天
3。SELECT DATEADD(Day,1-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())
4.——or
5。select dateadd(wk, datediff(wk,0,getdate()), 0)
6.-—本周第一天
7。select dateadd(wk, datediff(wk,0,getdate()), 6)
8。
9。—-上月第一天
10.SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,—DAY(GETDATE())+1,GETDATE())),111)
11.--上月最后一天
12.SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),111)+' 23:59:59’
13。—-本月第一天
14.select dateadd(dd,—datepart(dd,getdate())+1,getdate())
15.-—本月最后一天
16。select dateadd(dd,-datepart(dd,getdate()) ,dateadd(mm,1,getdate()))
17。-—本月天数
18。select datediff(dd,dateadd(dd,—datepart(dd,getdate())+1,getdate()), dateadd(dd,—datepart(dd,getdate())+1,dateadd(mm,1,getdate())))
19。—-or
20。select datepart(dd,dateadd(dd,—1,dateadd(mm,1,cast(cast(year(getdate()) as varchar)+’—'+cast(month(getdate()) as varchar)+'—01’ as datetime))))
21.
22.-—下月第一天
23。select dateadd(dd,—datepart(dd,getdate())+1,dateadd(mm,1,getdate()))
24。-—下月最后一天
25。SELECT CONVERT(CHAR(10),DATEADD(ms,—3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+' 23:59:59’
26。——季度第一天
27.SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
28。-—季度最后一天(直接推算法)
29。SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1+DATEPART(Quarter,getdate())*3—Month(getdate()),getdate()),120)+’1’)
30.--季度的最后一天(CASE判断法)
31。select DATEADD(Month,DATEPART(Quarter,getdate())*3-Month(getdate()),getdate())
32。
33。-—本月第一个星期一
34。SELECT DATEADD(wk, DATEDIFF(wk, '’, DATEADD(dd, 6 - DAY(getdate()), getdate())), ’’)
35.--去年最后一天
36。SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
37。--今年第一天
38。SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
39。—-今年最后一天
40.SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0))
41.
42。——指定日期所在周的任意一天
43.SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)—-5.指定日期所在周的任意星期几
44.--A. 星期天做为一周的第1天
45.SELECT DATEADD(Day,@number—(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
46.——B。 星期一做为一周的第1天
47.SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
48。-—-周内的第几日
49.select datepart(weekday,getdate()) as 周内的第几日
50。—-年内的第几周
51.select datepart(week,getdate()) as 年内的第几周
52。——年内的第几季
53。select datepart(quarter,getdate()) as 年内的第几季
54。
55。
56.——判断某天是当月的第几周的sql函数
57.CREATE FUNCTION WeekOfMonth(@day datetime)
58.RETURNS int
59.AS
60.begin
61。
62。————declare @day datetime
63.declare @num int
64。declare @Start datetime
65.declare @dd int
66.declare @dayofweek char(8)
67.declare @dayofweek_num char(8)
68.declare @startWeekDays int
69.---set @day=’2009-07—05’
70。if datepart(dd,@day)=1
71。return 1
72。else
73。set @Start= (SELECT DATEADD(mm, DATEDIFF(mm,0,@day), 0)) --一个月第一天的
74.set @dayofweek= (datename(weekday,@Start)) —--得到本月第一天是周几
75。set @dayofweek_num=(select (case @dayofweek when '星期一’ then 2
76.when '星期二' then 3
77.when '星期三' then 4
78.when ’星期四’ then 5
79。when ’星期五' then 6
80。when '星期六' then 7
81.when '星期日’ then 1
82。end))
83.set @dayofweek_num= 7—@dayofweek_num+1 ——-得到本月的第一周一共有几天
84.———print @dayofweek_num
85. set @dd=datepart(dd,@day) ---—得到今天是这个月的第几天
86。——print @dd
87。if @dd〈=@dayofweek_num --小于前一周的天数
88.return 1
89.else
90。set @dd=@dd—@dayofweek_num
91.if @dd % 7=0
92. begin
93。 set @num=@dd / 7
94。 return @num+1
95。
96. end
97。 else --if @dd % 7〈〉0
98。
99。 set @num=@dd / 7
100.set @num=@num+1+1
101. return @num
102。end
103。
104.--常用日期的视图
105.SELECT CONVERT(VARCHAR(10), GETDATE(), 120) AS today, REPLACE(CONVERT(varchar(8), GETDATE(), 108), ’:’, '') AS time,
106. REPLACE(REPLACE(REPLACE(CONVERT(varchar, GETDATE(), 120), ’—’, ''), ’ ', '’), ’:', ’’) AS all_date, CONVERT(varchar(12), GETDATE(), 112) AS date,
107。 YEAR(GETDATE()) AS year, MONTH(GETDATE()) AS month, DAY(GETDATE()) AS day, CONVERT(varchar(8), DATEADD(d, - 1, GETDATE()), 112)
108。 AS yestaday, CONVERT(varchar(8), DATEADD(d, 1, GETDATE()), 112) AS tomorrow
109。FROM
110.
111。/*
112。T—SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响
113。提示:
114.(@@Datefirst + datepart(weekday,@Date)) % 7 判断周几是最保险的! 与 @@DateFirst 无关,与语言版本无关
115.@@DateFirst 可能会导致 datepart(weekday,@Date) 不一样!
116.无论 @@DateFirst 等于几,无论是什么语言版本的 SQL Server 下面永远恒成立!
117.(@@Datefirst + datepart(weekday,@Date))%7 : 2、3、4、5、6、0、1 分别代表 周一 到 周日
118.-- */
119。
120.create function udf_GetAge(@StartDate datetime,@EndDate datetime)
121.returns integer
122。-— 返回精确年龄 select dbo.udf_GetAge(’1949-10—01’,getdate())
123.begin
124.return datediff(year,@StartDate,@EndDate)
125。 — case when datediff(day,dateadd(year,datediff(year,@StartDate,@EndDate),@StartDate),@EndDate) 〉= 0
126. then 0
127. else
128. 1
129. end
130。end
131。
132。go
133.
134.create function udf_DaysOfYearByDate(@Date datetime)
135。returns integer
136.-- 返回年的天数 可判断 平(365)、润(366) 年
137。begin
138。return datediff(day,dateadd(year,datediff(year,0,@Date),0),dateadd(year,datediff(year,0,@Date) + 1,0))
139.end
140.
141.go
142。
143.create function udf_DaysOfYear(@Year integer)
144。returns integer
145.-- 返回年的天数 可判断 平(365)、润(366) 年
146。begin
147。return datediff(day,dateadd(year,@year — year(0),0),dateadd(year,@year — year(0) + 1,0))
148。end
149.
150。go
151.
152。create function udf_HalfDay(@Date datetime)
153.returns datetime
154.-- 返回 @Date 是 上午 返回 @Date 的零点,@Date 是 下午 返回 @Date 的十二点
155。begin
156.return case when datepart(hour,@Date) 〈 12
157. then dateadd(day,datediff(day,0,@Date),0) ——上午归到 零点
158。 else
159。 dateadd(hour,12,datea
展开阅读全文