获取SQL 执行时间 、日期与长整型换转

拼搏现实的明天。 2022-07-03 14:56 191阅读 0赞
  1. create PROCEDURE pr_get_int64_system_time
  2. AS
  3. set nocount on
  4. BEGIN
  5. SELECT system_time = CONVERT(BIGINT,DATEDIFF(S,'1970-01-01 08:00:00.000',GETDATE()))*1000+DATEPART(MS,GETDATE());
  6. END
  7. set nocount off
  8. GO
  9. create PROCEDURE pr_gk_display_64time
  10. @millisecond BIGINT
  11. AS
  12. set nocount on
  13. DECLARE @second BIGINT , @now DATETIME
  14. BEGIN
  15. SET @second = @millisecond / 1000
  16. SET @millisecond = @millisecond % 1000
  17. SET @now = DATEADD(S, @second,'1970-01-01 08:00:00.000');
  18. SET @now = DATEADD(Ms, @millisecond, @now);
  19. print CONVERT(VARCHAR(50),@now,21);
  20. END
  21. set nocount off
  22. GO
  23. Create PROCEDURE pr_get_run_time
  24. @SQL NVARCHAR(MAX)
  25. as
  26. set nocount on
  27. BEGIN
  28. declare @now_date datetime
  29. declare @run_ms bigint
  30. set @now_date=GETDATE();
  31. EXEC SP_EXECUTESQL @SQL;
  32. SELECT @run_ms=DATEDIFF(MS,@now_date,GETDATE())
  33. print @run_ms
  34. END
  35. set nocount off
  36. ---每个月的起止日期
  37. declare @startdate datetime,@enddate datetime
  38. set @startdate=dateadd(mm,datediff(mm,0,getdate()),0)
  39. set @enddate=dateadd(ms,-2,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
  40. select convert(varchar(10),dateadd(day,number,@startdate),120) as col
  41. from master..spt_values
  42. where datediff(day,dateadd(day,number,@startdate), @enddate)>=0 and number>=0 and type='p'
  43. --一年内的所有周的起止日期
  44. set datefirst 7--设置每周的起始日期为 周末(美国(数据库)默认)
  45. ;with ach as
  46. (
  47. select dateadd(dd,number,cast(ltrim(year(getdate()))+'-01-01' as datetime)) date
  48. from master..spt_values
  49. where [type] = 'p' and number between 0 and 400
  50. ),cte as
  51. (
  52. select *
  53. from ach
  54. where year(date) = year(getdate())
  55. )
  56. select top 10 datepart(wk,date) as wk,min(date) mindate,max(date) maxdate
  57. from cte
  58. group by datepart(wk,date)
  59. --
  60. --本周第一天
  61. SELECT DATEADD(Day,1-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())
  62. --or
  63. select dateadd(wk, datediff(wk,0,getdate()), 0)
  64. --本周第一天
  65. select dateadd(wk, datediff(wk,0,getdate()), 6)
  66. --上月第一天
  67. SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111)
  68. --上月最后一天
  69. SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),111)+' 23:59:59'
  70. --本月第一天
  71. select dateadd(dd,-datepart(dd,getdate())+1,getdate())
  72. --本月最后一天
  73. select dateadd(dd,-datepart(dd,getdate()) ,dateadd(mm,1,getdate()))
  74. --本月天数
  75. select datediff(dd,dateadd(dd,-datepart(dd,getdate())+1,getdate()), dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate())))
  76. --or
  77. select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate()) as varchar)+'-'+cast(month(getdate()) as varchar)+'-01' as datetime))))
  78. --下月第一天
  79. select dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate()))
  80. --下月最后一天
  81. SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+' 23:59:59'
  82. --季度第一天
  83. SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
  84. --季度最后一天(直接推算法)
  85. SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1+DATEPART(Quarter,getdate())*3-Month(getdate()),getdate()),120)+'1')
  86. --季度的最后一天(CASE判断法)
  87. select DATEADD(Month,DATEPART(Quarter,getdate())*3-Month(getdate()),getdate())
  88. --本月第一个星期一
  89. SELECT DATEADD(wk, DATEDIFF(wk, '', DATEADD(dd, 6 - DAY(getdate()), getdate())), '')
  90. --去年最后一天
  91. SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
  92. --今年第一天
  93. SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
  94. --今年最后一天
  95. SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0))
  96. --指定日期所在周的任意一天
  97. SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)--5.指定日期所在周的任意星期几
  98. --A. 星期天做为一周的第1
  99. SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
  100. --B. 星期一做为一周的第1
  101. SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
  102. ---周内的第几日
  103. select datepart(weekday,getdate()) as 周内的第几日
  104. --年内的第几周
  105. select datepart(week,getdate()) as 年内的第几周
  106. --年内的第几季
  107. select datepart(quarter,getdate()) as 年内的第几季
  108. --判断某天是当月的第几周的sql函数
  109. CREATE FUNCTION WeekOfMonth(@day datetime)
  110. RETURNS int
  111. AS
  112. begin
  113. ----declare @day datetime
  114. declare @num int
  115. declare @Start datetime
  116. declare @dd int
  117. declare @dayofweek char(8)
  118. declare @dayofweek_num char(8)
  119. declare @startWeekDays int
  120. ---set @day='2009-07-05'
  121. if datepart(dd,@day)=1
  122. return 1
  123. else
  124. set @Start= (SELECT DATEADD(mm, DATEDIFF(mm,0,@day), 0)) --一个月第一天的
  125. set @dayofweek= (datename(weekday,@Start)) ---得到本月第一天是周几
  126. set @dayofweek_num=(select (case @dayofweek when '星期一' then 2
  127. when '星期二' then 3
  128. when '星期三' then 4
  129. when '星期四' then 5
  130. when '星期五' then 6
  131. when '星期六' then 7
  132. when '星期日' then 1
  133. end))
  134. set @dayofweek_num= 7-@dayofweek_num+1 ---得到本月的第一周一共有几天
  135. ---print @dayofweek_num
  136. set @dd=datepart(dd,@day) ----得到今天是这个月的第几天
  137. --print @dd
  138. if @dd<=@dayofweek_num --小于前一周的天数
  139. return 1
  140. else
  141. set @dd=@dd-@dayofweek_num
  142. if @dd % 7=0
  143. begin
  144. set @num=@dd / 7
  145. return @num+1
  146. end
  147. else --if @dd % 7<>0
  148. set @num=@dd / 7
  149. set @num=@num+1+1
  150. return @num
  151. end

发表评论

表情:
评论列表 (有 0 条评论,191人围观)

还没有评论,来说两句吧...

相关阅读