SQL点滴5—产生时间demention,主要是时间转换

原文:SQL点滴5—产生时间demention,主要是时间转换

数据仓库中有时间表,存储时间信息,这个存储过程接收开始时间结束时间,写入时间具体信息。有高手用excel函数功能很快能产生INSERT语句不会啊,只能用这个。

参考知识


1 vSET ANSI_NULLS ON
2  GO
3
4  SET QUOTED_IDENTIFIER ON
5 GO
6
7 /*--------------------------------------------------------
8 *generate Date demention
9 *@startdate '01/01/2010'
10 *@enddate '12/30/2010'
11 ---------------------------------------------------------*/
12
13 CREATE PROCEDURE dbo.AddDateTime
14 @startdate datetime,
15 @enddate datetime
16 AS
17 declare @i int
18 set @i=1
19
20 while(DATEDIFF(DD,@startdate,@enddate)>=0)
21 begin
22
23 insert into [ReportServer].[dbo].[D_DATE](
24 [DATE_KEY], --primarykey
25 [DATE], --datetime
26 [FULL_DATE_DESCRIPTION], --detail date
27 [DAY_OF_WEEK], --day of week from 1 to 6
28 [CALENDAR_MONTH], --month of year from 1 to 12
29 [CALENDAR_YEAR], --year
30 [FISCAL_YEAR_MONTH], --fiscal year
31 [HOLIDAY_INDICATOR], --holiday iden
32 [WEEKDAY_INDICATOR])
33 select
34 @i,
35 CONVERT(varchar(10),@startdate,101),
36 DATENAME(mm,@startdate)+' '+DATENAME(DD,@startdate)+', '+DATENAME(YYYY,@startdate),
37 DATEPART(DW,@startdate),
38 DATEPART(MM,@startdate),
39 DATEPART(YYYY,@startdate),
40 'F'+ CONVERT(varchar(7),@startdate,23),
41 case
42 when( CONVERT(varchar(5),@startdate,101) in ('01/01','01/05','02/05','03/05','01/10','02/10','03/10','04/10','05/10','06/10') ) then 1
43 else 0 end,
44 case
45 when(DATENAME(DW,@startdate) in ('Saturday','Sunday')) then 1
46 else 0 end
47
48 if DATEDIFF(DD,@startdate,@enddate)>=0
49
50 begin
51 set @startdate = DATEADD(dd,1,@startdate)
52 set @i=@i+1
53 continue
54 end
55
56 else
57
58 begin
59 break
60 end
61
62 end

时间: 2024-10-31 09:36:23

SQL点滴5—产生时间demention,主要是时间转换的相关文章

sql点滴42—mysql中的时间转换

原文:sql点滴42-mysql中的时间转换 UNIX时间戳转换为日期用函数: FROM_UNIXTIME()   select FROM_UNIXTIME(1156219870);   日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP()   Select UNIX_TIMESTAMP('2006-11-04 12:23:00′);   例:mysql查询当天的记录数:   $sql="select * from message Where DATE_FORMAT(FROM_UN

SQL点滴21—几个有点偏的语句

原文:SQL点滴21-几个有点偏的语句 SQL语句是一种集合操作,就是批量操作,它的速度要比其他的语言快,所以在设计的时候很多的逻辑都会放在sql语句或者存储过程中来实现,这个是一种设计思想.但是今天我们来讨论另外一个话题.Sql页提供了丰富的函数供我们使用,还有很多操作有意想不到的结果,今天这个随笔来看看一些不常见到的sql语句.这些语句不像普通的增删查那样平白,它的奇妙之处有时候让人另眼相看. 1.  假设我想把Person.Contact表中所有人的名字用逗号连接起来,串成一个字符串,可能

SQL点滴29—错误无处不在

原文:SQL点滴29-错误无处不在 我只想说以下是很基础的sql知识,但是很容易犯错.所以睁大我们的眼睛,屏住我们的呼吸,小心的检查吧! 案例1if not exists (select OrderID from CorpEmailSendQueue where orderid=600643425) begin     exec sp3_CorpEmailSendQueue_i @ID=NULL,@OrderID=600643425, @OrderType='F', @EmailType='-2

SQL点滴13—收集SQLServer线程等待信息

原文:SQL点滴13-收集SQLServer线程等待信息 要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化的依据. sys.dm_os_wait_stats 这是一个系统视图,里面存储线程所遇到的所有的等待信息,具体的列如下表 列名 数据类型 说明 Wait_type Nvarchar(60) 等待类型名称 waiting_tasks_count Bigint 等待类型的等待数.该计数

SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息,今天把自己工作过程中经常用到的一些数据库引擎存储过程,系统视图等等总结一下以备不时之用.下面的知识多是自己总结,有一些参考了MSDN. sp_help 有时候想尽快查出数据库对象的相关信息,这个存储过程就很有用了.使用它可以查询出整个数据库中所有对象的相关信息.直接运行sp_help结果如下图1,

SQL点滴27—性能分析之执行计划

原文:SQL点滴27-性能分析之执行计划 一直想找一些关于SQL语句性能调试的权威参考,但是有参考未必就能够做好调试的工作.我深信实践中得到的经验是最珍贵的,书本知识只是一个引导.本篇来源于<Inside Microsoft SQL Server 2008>,有经验的高手尽管拍砖把.   这个部分将讲解一些性能分析工具,这些性能分许主要关注在执行计划.   缓存执行计划  SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans:   

SQL点滴22—性能优化没有那么神秘

原文:SQL点滴22-性能优化没有那么神秘 经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一些很复杂的问题,掌握了基本的知识之后也可以尝试优化自己的SQL程序,甚至是其他相关的程序.优化是一些工作积累之后的经验总结和代码意识,只要平时注意积累,你也可以做优化的工作.这一篇随笔是转载,不过我强烈推荐给所有对数据库优化有兴趣的博友,读了这一篇之后下一

SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务

原文:SQL点滴9-SQL Server中的事务处理以及SSIS中的内建事务 我们可以把SSIS中的整个package包含在一个事务中,但是如果在package的执行过程中有一个表需要锁定应该怎么处理呢?SSIS内建的事务处理可以解决这个问题.在此之前首先来熟悉一下SQL Server中的事务的概念.   事务 SQL Server中的事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中永久的组成部分.如果事务遇到错误且必须取消或回滚,则所有的数据修改均被

SQL点滴26—常见T-SQL面试解析

原文:SQL点滴26-常见T-SQL面试解析   它山之石可以攻玉,这一篇是读别人的博客后写下的,不是原原本本的转载,加入了自己的分析过程和演练.sql语句可以解决很多的复杂业务,避免过多的项目代码,下面几个语句很值得玩味. 1. 已经知道原表year salary2000 10002001 20002002 30002003 4000怎么查询的到下面的结果,就是累积工资year salary2000 10002001 30002002 60002003 10000 思路:这个需要两个表交叉查询