`
k_lb
  • 浏览: 842907 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

Sql 每月第二周

 
阅读更多
USE [UILogDB]
GO
/****** Object: StoredProcedure [dbo].[usp_jx_weekdate] Script Date: 11/08/2011 17:57:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  <jianxiong>
-- Create date: <2011-11-08>
-- Description: <weekdate>
-- =============================================
CREATE PROCEDURE [dbo].[usp_jx_weekdate]
 -- Add the parameters for the stored procedure here
@tablename varchar(500),
@datefield varchar(500),
@weeknum int

AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
 
 declare @sql1 varchar(max)
 declare @sql2 varchar (max)
 declare @weekbegin int
 declare @weekend int
 declare @showfield varchar(max)
 -- Insert statements for procedure here
 
 if @weeknum=1
 begin
  set @weekbegin=2
  set @weekend=8
 end
 else if @weeknum=2
 begin
  set @weekbegin=9
  set @weekend=15
 end
 else if @weeknum=3
 begin
  set @weekbegin=16
  set @weekend=22
 end
 else if @weeknum=4
 begin
  set @weekbegin=23
  set @weekend=29
 end
 else if @weeknum=5
 begin
  set @weekbegin=30
  set @weekend=36
 end 
 else
 begin
  set @weekbegin=2
  set @weekend=8
 end
 
 set @showfield='select'
 select @showfield=@showfield+ ',['+name+'] ' from syscolumns where id=object_id(@tablename) order by colid
 set @showfield=REPLACE(@showfield,'select,','')

 

 set @sql1=
 ('
  with week as
  (
  select 
  case 
   when MONTH('+@datefield+')=1 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=1 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=2 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=2 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=3 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=3 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=4 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=4 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=5 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=5 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=6 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=6 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=7 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=7 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=8 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=8 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=9 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=9 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
 ')
 
 set @sql2=
 ('
   when MONTH('+@datefield+')=10 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=10 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=11 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=11 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')
   when MONTH('+@datefield+')=12 then (select top 1 '+@datefield+'PART(DW,'+@datefield+'ADD(day,-1,'+@datefield+')) as week from '+@tablename+' b where MONTH('+@datefield+')=12 and year(a.'+@datefield+')=year(b.'+@datefield+') order by b.date)+day('+@datefield+')   
   end as week,*
  from '+@tablename+' a
  )
  select '+@showfield+' from week where week between '+convert(varchar(5),@weekbegin)+' and '+convert(varchar(5),@weekend)+' 
 ')
 
 exec (@sql1+@sql2)
END




其中

yr_view_orders_rate 为原数据表名

date 为日期字段

分享到:
评论

相关推荐

    sqlserver 计算当月所有自然周的区间。

    例如,如果一个月的第一天是周二,那么这个月的第一个自然周将会从第一个周二开始直到第一个周日结束,第二个自然周则会从第二个周一持续到第二个周日。这种方法能够确保每个“周”都完整地包含了七天的时间段。 ##...

    请教用sql实现通过已知的年,月,第几周和周几,得到具体的日期

    例如,如果我们知道某年某月的第一天是星期二,我们要找的是第三周的星期一,那么我们可以先找到第二周的星期一,然后加上7天。 以下是一个示例查询,它演示了如何找到给定年份、月份和周数的星期一: ```sql ...

    SQL SERVER 获取年、季、月、周、日开始时间和结束时间

    time: 返回的时间点,如果时间点为8点,返回的结束时间为第二天的8点,例如获取8月最后一天的结束时间,以8点计,则返回值为 2022-09-01 07:59:59.997 select dbo.GetDateStartFirstAndLast('-q','s','2022-08-03',...

    sql函數,week周數,返回日期

    这通常不是1月1日,而是1月1日之后的第一个星期一。 - 然后,通过 `dateadd()` 和 `datepart()` 函数计算出所求周的第一天。 - 示例代码:`set @dateFirstDayOfWeek = dateadd(day, 1 - datepart(weekday, @...

    sql语句查询周月年季的最后或第一天

    ### 二、SQL语句实现周、月、年、季度的第一天和最后一天 #### 1. 查询某个月的第一天和最后一天 - **第一天**: ```sql SELECT DATEADD(day, -DATEPART(day, GETDATE()) + 1, GETDATE()) ``` 或者 ```sql ...

    MSSQL判断任意时间是某月的第几周

    `DATEDIFF(mm, 0, @day)`计算的是输入日期与该月的第一天之间的月份数差,然后`DATEADD`将这个差值加到1900年1月1日(SQL Server中的日期零点)上,得到当月的第一天。 2. `@dayofweek`使用`DATENAME`函数获取输入...

    Oracle sql查询当前月的所有日期

    - **`TO_CHAR()`函数的格式模型**:`TO_CHAR()`函数可以接受第二个参数指定日期或数字的格式模型,比如`'dd'`表示天数,`'yyyy-mm-dd'`表示完整的日期格式等。 ### 总结 通过上述SQL语句,我们可以轻松地获取当前...

    SQL获取当前月的第一天和最后一天和当前月一共几天

    在第二个方法中,同样声明了一个`@FistDayOfThisMonth`变量,通过`@NOW - DAY(@NOW) + 1`来获取当前月的第一天,这个表达式将当前日期减去其日数,然后加1,就得到了每月的第一天。 ```sql DECLARE @...

    SQL Server时间算法

    这里使用了`DATEADD`函数,该函数的第一个参数是时间单位(这里是`DAY`),第二个参数是要添加的时间值(这里是-1,表示前一天),第三个参数是基准日期(这里是当前日期`@Date`)。 ### 获取当前日期的后一天 与...

    周、月、季、年统计SQL

    本文将详细介绍如何利用Oracle SQL来获取当前周、月、季、年的起始日期与结束日期,并进一步讨论如何基于这些日期进行数据统计。 #### 1. 获取当前周的起始与结束日期 - **当前周周一**:`select next_day(SYSDATE...

    SQL作业全操作代码

    除了基础的每日执行外,代码中还提供了更高级的执行计划配置方法,包括每周、每月以及每小时的执行: - **每周执行**: ```sql EXEC msdb..sp_add_jobschedule @job_id = @jobid, @freq_type = 8, -- 每周执行 ...

    精妙的SQL语句第1/2页

    在SQL语言中,掌握一些精妙的技巧可以极大地提高数据操作的效率和便捷性。以下是一些关于SQL语句的精彩示例,涵盖了复制表、拷贝数据、外连接查询、时间判断、删除操作以及复杂的数据分析等多方面的知识点。 1. **...

    中兴SQL题目 中兴SQL题目

    在第二个问题中,我们注意到,尽管在“年龄”和“月工资”字段上创建了索引,但某些查询可能不会利用这些索引。例如,对于条件`年龄 &gt; 45 OR 月工资 ,查询优化器可能会选择全表扫描,因为索引在处理OR条件时效率不...

    使用sql语句查询的数据按时间递增累加

    - 第二条记录:`REGION_NAME`为空,`ܺķ`为“һ”,`ƻʱ`为“2013-02-01”,`Ԥ`为80,`ʵʷ`、`ò`、`ò컯`均为NULL。 这些数据代表了不同时间点下的预计与实际发生情况,以及它们之间的差异。 ### 二、实现...

    SQL Server 查询两个日期之间的所有月份

    `+ '01'`是为了确保日期始终是每月的第一天,以便按月份正确地进行比较。 接下来,通过`WHERE`子句过滤出在这个范围内的月份,并使用`AS [Date]`重命名列名为`Date`,这样结果集中就包含了起始日期和结束日期之间...

    SQL Server 数据库实现定时自动备份

    可以选择每天、每周或每月执行,根据实际需求调整备份频率。 5. **启用SQL Server代理服务**:如果服务未启动,需要确保SQL Server代理服务处于运行状态,否则作业无法执行。 6. **测试和监控**:在设置完成后,先...

    经典SQL语句大全

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...

    SQL Server 数据库应用 2011年1月

    再者,文件中提到了数据库的范式(Normal Form),范式是关系数据库设计中消除冗余和依赖的一个过程,其中包括第一范式(1NF)、第二范式(2NF)等。其中提到的“分解性”、“传递性”等概念,这些都是范式理论中的...

    Mastering Oracle SQL(2th)

    《掌握Oracle SQL(第二版)》是一本由Alane Aulieu和Sanjay Ishra编写的书籍,由O'Reilly出版社于2004年6月出版,ISBN为0-596-00632-2,共计492页。这本书更新至覆盖Oracle 10g版本,专注于实用的、专家级的最佳...

Global site tag (gtag.js) - Google Analytics