日期年月日处理函数文档格式.docx

上传人:b****7 文档编号:22187145 上传时间:2023-02-03 格式:DOCX 页数:14 大小:18.47KB
下载 相关 举报
日期年月日处理函数文档格式.docx_第1页
第1页 / 共14页
日期年月日处理函数文档格式.docx_第2页
第2页 / 共14页
日期年月日处理函数文档格式.docx_第3页
第3页 / 共14页
日期年月日处理函数文档格式.docx_第4页
第4页 / 共14页
日期年月日处理函数文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

日期年月日处理函数文档格式.docx

《日期年月日处理函数文档格式.docx》由会员分享,可在线阅读,更多相关《日期年月日处理函数文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

日期年月日处理函数文档格式.docx

29.SELECTDATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1+DATEPART(Quarter,getdate())*3-Month(getdate()),getdate()),120)+'

1'

30.--季度的最后一天(CASE判断法)

31.selectDATEADD(Month,DATEPART(Quarter,getdate())*3-Month(getdate()),getdate())

32.

33.--本月第一个星期一

34.SELECTDATEADD(wk,DATEDIFF(wk,'

'

DATEADD(dd,6-DAY(getdate()),getdate())),'

35.--去年最后一天

36.SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))

37.--今年第一天

38.SELECTDATEADD(yy,DATEDIFF(yy,0,getdate()),0)

39.--今年最后一天

40.SELECTdateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))

41.

42.--指定日期所在周的任意一天

43.SELECTDATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)--5.指定日期所在周的任意星期几

44.--A.星期天做为一周的第1天

45.SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)

46.--B.星期一做为一周的第1天

47.SELECTDATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)

48.---周内的第几日

49.selectdatepart(weekday,getdate())as周内的第几日

50.--年内的第几周

51.selectdatepart(week,getdate())as年内的第几周

52.--年内的第几季

53.selectdatepart(quarter,getdate())as年内的第几季

54.

55.

56.--判断某天是当月的第几周的sql函数

57.CREATEFUNCTIONWeekOfMonth(@daydatetime)

58.RETURNSint

59.AS

60.begin

61.

62.----declare@daydatetime

63.declare@numint

64.declare@Startdatetime

65.declare@ddint

66.declare@dayofweekchar(8)

67.declare@dayofweek_numchar(8)

68.declare@startWeekDaysint

69.---set@day='

2009-07-05'

70.ifdatepart(dd,@day)=1

71.return1

72.else

73.set@Start=(SELECTDATEADD(mm,DATEDIFF(mm,0,@day),0))--一个月第一天的

74.set@dayofweek=(datename(weekday,@Start))---得到本月第一天是周几

75.set@dayofweek_num=(select(case@dayofweekwhen'

星期一'

then2

76.when'

星期二'

then3

77.when'

星期三'

then4

78.when'

星期四'

then5

79.when'

星期五'

then6

80.when'

星期六'

then7

81.when'

星期日'

then1

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.return1

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.SELECTCONVERT(VARCHAR(10),GETDATE(),120)AStoday,REPLACE(CONVERT(varchar(8),GETDATE(),108),'

:

'

)AStime,

106.REPLACE(REPLACE(REPLACE(CONVERT(varchar,GETDATE(),120),'

),'

'

)ASall_date,CONVERT(varchar(12),GETDATE(),112)ASdate,

107.YEAR(GETDATE())ASyear,MONTH(GETDATE())ASmonth,DAY(GETDATE())ASday,CONVERT(varchar(8),DATEADD(d,-1,GETDATE()),112)

108.ASyestaday,CONVERT(varchar(8),DATEADD(d,1,GETDATE()),112)AStomorrow

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等于几,无论是什么语言版本的SQLServer下面永远恒成立!

117.(@@Datefirst+datepart(weekday,@Date))%7:

2、3、4、5、6、0、1分别代表周一到周日

118.--*/

119.

120.createfunctionudf_GetAge(@StartDatedatetime,@EndDatedatetime)

121.returnsinteger

122.--返回精确年龄selectdbo.udf_GetAge('

1949-10-01'

getdate())

123.begin

124.returndatediff(year,@StartDate,@EndDate)

125.-casewhendatediff(day,dateadd(year,datediff(year,@StartDate,@EndDate),@StartDate),@EndDate)>

=0

126.then0

127.else

128.1

129.end

130.end

131.

132.go

133.

134.createfunctionudf_DaysOfYearByDate(@Datedatetime)

135.returnsinteger

136.--返回年的天数可判断平(365)、润(366)年

137.begin

138.returndatediff(day,dateadd(year,datediff(year,0,@Date),0),dateadd(year,datediff(year,0,@Date)+1,0))

139.end

140.

141.go

142.

143.createfunctionudf_DaysOfYear(@Yearinteger)

144.returnsinteger

145.--返回年的天数可判断平(365)、润(366)年

146.begin

147.returndatediff(day,dateadd(year,@year-year(0),0),dateadd(year,@year-year(0)+1,0))

148.end

149.

150.go

151.

152.createfunctionudf_HalfDay(@Datedatetime)

153.returnsdatetime

154.--返回@Date是上午返回@Date的零点,@Date是下午返回@Date的十二点

155.begin

156.returncasewhendatepart(hour,@Date)<

12

157.thendateadd(day,datediff(day,0,@Date),0)--上午归到零点

158.else

159.dateadd(hour,12,dateadd(day,datediff(day,0,@Date),0))--下午归到十二点

160.end

161.end

162.

163.go

164.

165.createfunctionudf_WeekDiff(@StartDatedatetime,@EndDatedatetime)

166.returnsinteger

167.--返回[@StartDate,@EndDate]之间周数周日是当周的最后一天

168.begin

169.returndatediff(week,@StartDate,@EndDate)--+1

170.+casewhen(@@Datefirst+datepart(weekday,@StartDate))%7=1

171.then1

172.else

173.0

174.end

175.-casewhen(@@Datefirst+datepart(weekday,@EndDate))%7=1

176.then1

177.else0

178.end

179.end

180.

181.go

182.

183.createfunctionudf_WeekOfMonth(@Datedatetime)

184.--返回@Date是所在月的第几周周日是当周的最后一天

185.returnsinteger

186.begin

187.returndatediff(week

188.,casewhen(@@Datefirst+datepart(weekday,dateadd(month,datediff(month,0,@Date),0)))%7=1

189.thendateadd(month,datediff(month,0,@Date),0)-1

190.else

191.dateadd(month,datediff(month,0,@Date),0)

192.end

193.,casewhen(@@Datefirst+datepart(weekday,@Date))%7=1

194.then@Date-1

195.else@Date

196.)

197.end

198.--流水号编码方式

199.--现实生活中的流水帐号的格式有五花八门,本来主要探讨一种比较普遍的格式2位字符串+4位年月日期+4位递增数字(如MA2009090001),其他格式都不是问题。

200.

201.Declare@SerialLongint,@iint,@ObjLengint

202.set@SerialLong=4--定义最大的单号长度位数

203.Declare@NowDatevarchar(10)

204.set@NowDate=GetDate()--取得本日完整日期

205.Declare@NowYearchar(4),@NowMonthchar

(2),@NowDaychar

(2)

206.set@NowYear=year(@NowDate)--取得年份

207.set@NowMonth=Month(@NowDate)--取得月份

208.set@NowDay=Day(@NowDate)--取得日期

209.Declare@FullYearchar(4),@fullMonthchar

(2),@FullDaychar

(2),@FullYMDchar(8)

210.set@fullyear=@NowYear

211.--select@fullyear

212.ifLen(@NowMonth)=1--如果月份为10月以下则在月份前加0

213.Begin

214.set@FullMonth='

0'

+@NowMonth

215.End

216.Else

217.Begin

218.set@FullMonth=@NowMonth

219.end

220.--select@FullMonth

221.--IFLEN(@NOWDAY)=1--如果日期小于10则在前面加0

222.--BEGIN

223.--SET@FULLDAY='

+@NOWDAY

224.--END

225.--Else

226.--Begin

227.--set@FullDay=@NowDay

228.--End

229.--组合今日的完整日期

230.--set@FullYmd='

MA'

+@fullyear+@fullMonth+@FullDay

231.set@FullYmd='

+@fullyear+@fullMonth

232.--select@FullYmd

233.Declare@MaxSerialchar(4)

234.--取得最大的序列号,如果为空时默认编为0:

此处请改为自已对应表的对应字段进行查询

235.select@MaxSerial=isNull(SUBSTRING(MAX(UserID),9,4),'

)FromA_CY_AdminUser

236.

237.IFisnumeric(@MaxSerial)=1--检查当前的流水号是否为数值

238.Begin

239.set@MaxSerial=@MaxSerial+1

240.set@ObjLeng=Len(@MaxSerial)

241.IF@ObjLeng<

@SerialLong

242.begin

243.set@i=0

244.While@i<

(@SerialLong-@ObjLeng)--循环判断是否小于定义长度,小于则在前面+0

245.Begin

246.set@MaxSerial='

+convert(varchar(4),@MaxSerial)

247.set@i=@i+1

248.IF@i<

(@SerialLong-@ObjLeng)

249.continue

250.Else

251.break

252.End

253.End

254.End

255.IFlen(@MaxSerial)=@SerialLong--判断序列号是否已满9999

256.Begin

257.Declare@FullSerialchar(12)

258.set@FullSerial=@FullYMD+@MaxSerial--组合新的完整编号

259.End

260.else

261.Begin

262.set@FullSerial='

263.End

264.--Select@FullSerial

265.

266.

267.--假日表

268.ifexists(select*fromdbo.sysobjectswhereid=object_id(N'

[tb_Holiday]'

)andOBJECTPROPERTY(id,N'

IsUserTable'

)=1)

269.droptable[tb_Holiday]

270.GO

271.--定义节假日表

272.CREATETABLEtb_Holiday(

273.HDatesmalldatetimeprimarykeyclustered,--节假日期

274.Namenvarchar(50)notnull)--假日名称

275.GO

276.ifexists(select*fromdbo.sysobjectswhereid=object_id(N'

[dbo].[f_WorkDay]'

)andxtypein(N'

FN'

N'

IF'

TF'

))

277.dropfunction[dbo].[f_WorkDay]

278.GO

279.--计算两个日期之间的工作天数

280.CREATEFUNCTIONf_WorkDay(

281.@dt_begindatetime,--计算的开始日期

282.@dt_enddatetime--计算的结束日期

283.)RETURNSint

284.AS

285.BEGIN

286.IF@dt_begin>

@dt_end

287.RETURN(DATEDIFF(Day,@dt_begin,@dt_end)

288.+1-(

289.SELECTCOUNT(*)FROMtb_Holiday

290.WHEREHDateBETWEEN@dt_beginAND@dt_end))

291.RETURN(-(DATEDIFF(Day,@dt_end,@dt_begin)

292.+1-(

293.SELECTCOUNT(*)FROMtb_Holiday

294.WHEREHDateBETWEEN@dt_endAND@dt_begin)))

295.END

296.GO

297.ifexists(select*fromdbo.sysobjectswhereid=object_id(N'

[dbo].[f_WorkDayADD]'

298.dropfunction[dbo].[f_WorkDayADD]

299.GO

300.--在指定日期上增加工作天数

301

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1