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 为日期字段
分享到:
相关推荐
例如,如果一个月的第一天是周二,那么这个月的第一个自然周将会从第一个周二开始直到第一个周日结束,第二个自然周则会从第二个周一持续到第二个周日。这种方法能够确保每个“周”都完整地包含了七天的时间段。 ##...
例如,如果我们知道某年某月的第一天是星期二,我们要找的是第三周的星期一,那么我们可以先找到第二周的星期一,然后加上7天。 以下是一个示例查询,它演示了如何找到给定年份、月份和周数的星期一: ```sql ...
time: 返回的时间点,如果时间点为8点,返回的结束时间为第二天的8点,例如获取8月最后一天的结束时间,以8点计,则返回值为 2022-09-01 07:59:59.997 select dbo.GetDateStartFirstAndLast('-q','s','2022-08-03',...
这通常不是1月1日,而是1月1日之后的第一个星期一。 - 然后,通过 `dateadd()` 和 `datepart()` 函数计算出所求周的第一天。 - 示例代码:`set @dateFirstDayOfWeek = dateadd(day, 1 - datepart(weekday, @...
### 二、SQL语句实现周、月、年、季度的第一天和最后一天 #### 1. 查询某个月的第一天和最后一天 - **第一天**: ```sql SELECT DATEADD(day, -DATEPART(day, GETDATE()) + 1, GETDATE()) ``` 或者 ```sql ...
`DATEDIFF(mm, 0, @day)`计算的是输入日期与该月的第一天之间的月份数差,然后`DATEADD`将这个差值加到1900年1月1日(SQL Server中的日期零点)上,得到当月的第一天。 2. `@dayofweek`使用`DATENAME`函数获取输入...
- **`TO_CHAR()`函数的格式模型**:`TO_CHAR()`函数可以接受第二个参数指定日期或数字的格式模型,比如`'dd'`表示天数,`'yyyy-mm-dd'`表示完整的日期格式等。 ### 总结 通过上述SQL语句,我们可以轻松地获取当前...
在第二个方法中,同样声明了一个`@FistDayOfThisMonth`变量,通过`@NOW - DAY(@NOW) + 1`来获取当前月的第一天,这个表达式将当前日期减去其日数,然后加1,就得到了每月的第一天。 ```sql DECLARE @...
这里使用了`DATEADD`函数,该函数的第一个参数是时间单位(这里是`DAY`),第二个参数是要添加的时间值(这里是-1,表示前一天),第三个参数是基准日期(这里是当前日期`@Date`)。 ### 获取当前日期的后一天 与...
本文将详细介绍如何利用Oracle SQL来获取当前周、月、季、年的起始日期与结束日期,并进一步讨论如何基于这些日期进行数据统计。 #### 1. 获取当前周的起始与结束日期 - **当前周周一**:`select next_day(SYSDATE...
除了基础的每日执行外,代码中还提供了更高级的执行计划配置方法,包括每周、每月以及每小时的执行: - **每周执行**: ```sql EXEC msdb..sp_add_jobschedule @job_id = @jobid, @freq_type = 8, -- 每周执行 ...
在SQL语言中,掌握一些精妙的技巧可以极大地提高数据操作的效率和便捷性。以下是一些关于SQL语句的精彩示例,涵盖了复制表、拷贝数据、外连接查询、时间判断、删除操作以及复杂的数据分析等多方面的知识点。 1. **...
在第二个问题中,我们注意到,尽管在“年龄”和“月工资”字段上创建了索引,但某些查询可能不会利用这些索引。例如,对于条件`年龄 > 45 OR 月工资 ,查询优化器可能会选择全表扫描,因为索引在处理OR条件时效率不...
- 第二条记录:`REGION_NAME`为空,`ܺķ`为“һ”,`ƻʱ`为“2013-02-01”,`Ԥ`为80,`ʵʷ`、`ò`、`ò컯`均为NULL。 这些数据代表了不同时间点下的预计与实际发生情况,以及它们之间的差异。 ### 二、实现...
`+ '01'`是为了确保日期始终是每月的第一天,以便按月份正确地进行比较。 接下来,通过`WHERE`子句过滤出在这个范围内的月份,并使用`AS [Date]`重命名列名为`Date`,这样结果集中就包含了起始日期和结束日期之间...
可以选择每天、每周或每月执行,根据实际需求调整备份频率。 5. **启用SQL Server代理服务**:如果服务未启动,需要确保SQL Server代理服务处于运行状态,否则作业无法执行。 6. **测试和监控**:在设置完成后,先...
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...
再者,文件中提到了数据库的范式(Normal Form),范式是关系数据库设计中消除冗余和依赖的一个过程,其中包括第一范式(1NF)、第二范式(2NF)等。其中提到的“分解性”、“传递性”等概念,这些都是范式理论中的...
《掌握Oracle SQL(第二版)》是一本由Alane Aulieu和Sanjay Ishra编写的书籍,由O'Reilly出版社于2004年6月出版,ISBN为0-596-00632-2,共计492页。这本书更新至覆盖Oracle 10g版本,专注于实用的、专家级的最佳...