use POC
go
IF OBJECT_ID('dbo.isLeapYear','function') IS NOT NULL
DROP function dbo.isLeapYear
IF OBJECT_ID('dbo.TD_CALENDAR','TABLE') IS NOT NULL
DROP TABLE dbo.TD_CALENDAR
go
--创建维表
--@date_int,@date_v,@date_name,@year_int,@year_name,@quarter_int,@quarter_name,@month_int,@month_name,null
CREATE TABLE TD_CALENDAR
(
DATE_ID int NOT NULL,
DATE_VALUE DATE,
DATE_NAME VARCHAR(16),
YEAR_ID int,
YEAR_NAME VARCHAR(16),
QUARTER_ID int,
QUARTER_NAME VARCHAR(16),
MONTH_ID int,
MONTH_NAME VARCHAR(16),
WEEK_ID INT,
WEEK_NAME VARCHAR(20)
);
go
--创建函数isLeapYear 判断是否为闰年,输入参数为INT型的年份
--返回1则表示是r闰年
create function isLeapYear (@year int)
returns int
AS
begin
declare @isLeap int = 0;
if (datediff(day,cast(@year as char)+ '-1-1 ',cast(@year+1 as char)+ '-1-1 ')) = 366
set @isLeap = 1
else
set @isLeap = 0
return @isLeap
end
go
declare @date_v date = '2000-12-31'; --设置起始年份,实际从下一年开始
declare @yearCount int =1 --@yearCount 年数的循环计数器
declare @numbersOfYear int = 10 ; --@yearCount 设置创建维表的年数
while @yearCount <= @numbersOfYear
begin
declare @i int = 0; --循环计数器
declare @iCount int; --平年@iCount = 364,闰年@iCount = 365
declare @date_int int; --int型的date key 如20010101
declare @date_name varchar(20);
declare @year_int int;
declare @year_name varchar(16);
declare @quarter_int int;
declare @quarter_name varchar(16);
declare @month_int int;
declare @month_name varchar(16);
declare @week_int int;
declare @week_name varchar(20);
if dbo.isLeapYear(YEAR(DATEADD(DD,1,@date_v))) =1 --isLeapYear函数判断该年是否为闰年
set @iCount = 365
else
set @iCount = 364
while @i <= @iCount
begin
--从初始化值的下一年的第一天开始,本应为DO WHILE循环的
set @date_v = DATEADD(DD,1,@date_v);
--INT型的DATE KEY 用下式返回并不理想 会产生如 2011019 缺0的情况,故应改用DATEPART函数
-- set @date_int = CONVERT(INT,DATENAME(YYYY,@date_v) + DATENAME(MM,@date_v) + DATENAME (DD,@date_v));
set @date_int = DATEPART (YEAR,@date_v) * 10000 + DATEPART (MONTH,@date_v)*100 +DATEPART (DAY,@date_v)
set @date_name = DATENAME(YYYY,@date_v) + '年' + DATENAME(MM,@date_v) + '月' + DATENAME (DD,@date_v) + '日';
set @year_int = DATEPART(YYYY,@date_v);
set @year_name = DATENAME(YYYY,@date_v)+ '年';
set @quarter_int = DATEPART(QUARTER,@date_v);
set @quarter_name = '第' + DATENAME(QUARTER,@date_v) + '季度';
set @month_int = DATEPART (MONTH,@date_v);
set @month_name = DATENAME(MONTH,@date_v) + '月';
set @week_int = DATEPART(WEEK ,@date_v)
set @week_name = DATENAME(WEEK,@date_v) + '周'
insert into POC.dbo.TD_CALENDAR
VALUES(@date_int,@date_v,@date_name,@year_int,@year_name,@quarter_int,@quarter_name,@month_int,@month_name,@week_int,@week_name);
set @i = @i + 1;
end
set @yearCount = @yearCount + 1;
end
go
--select COUNT(*) from POC.dbo.td_calendar
--where year_id = 2004
--truncate table poc.dbo.td_calendar
用到的日期函数整理一下:
DATEADD (@Period,@int,@smalldatetime ) 返回smalldatetime
@Period为区间类型(Such as Year or Month )
作用:返回增减后的日期
DATEPART(@Period,@datetimeoffset) 返回 int
DATETIMEOFFSET数据类型,此数据类型让你存储的日期和时间(24小时制)是时区一致的
作用:取得需要日期部分的整型
DATENAME(@Period,@datetimeoffset)返回 nvarchar
作用:取得需要日期部分的字符串型
-- 但是实验结果是DATENAME(MONTH,'2011-01-01') 返回 N'01';
-- DATENAME(DAY,'2011-01-01') 返回N'1'
CONVERT(VARCHAR,@datetime,@argument)
作用:日期型转换为DATE型时,第三个参数指定转换格式。具体用法参考帮助手册
分享到:
相关推荐
- **定义**:Transact-SQL(T-SQL)是SQL Server 的查询语言,用于管理数据库及其对象。 - **主要功能**: - **创建数据库对象**:包括表、视图、存储过程等。 - **数据访问与修改**:如插入、更新和删除数据。 -...
通过学习索引的创建和管理,以及查询执行计划的分析,你可以优化查询性能,减少查询响应时间。了解如何使用EXPLAIN或SET SHOWPLAN_ALL等选项来查看和理解执行计划,将帮助你找出性能瓶颈并进行改进。 此外,SQL ...
在SQL Server中,Transact-SQL (T-SQL) 是主要的编程语言,用于执行各种数据库操作,如创建表、插入数据、更新数据和删除数据。例如,`CREATE TABLE`语句用于定义新表,`INSERT INTO`用于添加数据,`UPDATE`用于修改...
但是,索引也会增加写入操作的时间消耗,因此在创建索引时需要权衡读写性能。 #### 6. 视图的使用 - **视图概念**: 视图可以看作是一个虚拟表,它是由一个SELECT语句定义的,用于从一个或多个实际表中选择数据。...
以上内容总结了 SQLServer 数据仓库的基本概念和技术要点,包括不同版本的特点、数据仓库的创建与维护、维度和多维数据集的设计等方面。这些知识点对于理解和运用 SQLServer 进行数据仓库构建具有重要意义。
该资源的标题是"SQL查询结果转置源码",描述是"将查询结果进行二维转置后输出"。该资源的标签是"SQL查询结果转置源码"。下面我们将对该资源的标题和描述进行详细的解释。 首先,我们需要了解什么是SQL查询结果转置。...
本资源提供的“Power BI 智能时间表模板及日期排序”是一个实用的工具包,它包含了Power BI仪表板的源文件以及用于创建智能时间维表的代码。下面我们将深入探讨这两个关键知识点。 1. **Power BI仪表板源文件**: ...
通过学习本教程,你将能够安装和配置SQL Server,进行数据库备份与恢复,管理用户权限,编写T-SQL语句(如SELECT、INSERT、UPDATE、DELETE)来查询和操作数据,以及创建和调用触发器和存储过程,以实现更复杂的业务...
在T-SQL(Transact-SQL),SQL Server的扩展版本中,虽然大小写不敏感,但为了代码可读性,通常遵循大写字母用于关键字,小写字母用于标识符和变量的约定。 1. 字符串类型: - `CHAR(n)` 和 `NCHAR(n)` 是固定长度...
- **定义:** 存储过程是预先编译并存储在 SQL Server 中的一组 T-SQL 语句。 - **优点:** 可以提高代码复用性和执行效率。 **22. 替代触发器** - **定义:** 替代触发器是在触发触发器的修改操作之前执行的...
在SQL Server 2005中,T-SQL是SQL Server专用的数据库查询语言,除了标准的SQL语句外,还提供了常量和变量的概念、运算符与表达式、流程控制语句(如IF...ELSE, WHILE循环等)、内置函数和游标等高级特性。...
- **创建数据库**:使用 T-SQL 语言中的 `CREATE DATABASE` 命令来创建一个新的数据库。 - **连接数据库**:使用 SQL Server Management Studio 或其他工具连接到 SQL Server 实例。 - **执行基本操作**:使用 SQL ...
- **缓慢变化维 (Slowly Changing Dimensions)**:提供了多种方法来处理随着时间变化的维度数据,如类型1、类型2和类型3的变化。 - **主键检索 (Key Lookup)**:在数据装载过程中,通过主键查找可以避免重复数据的...
- **题目**: 在SQL中,SELEC语T句的“SELECT TOP 10”表示查询结果中(A) - **选项**: A. 前10条记录 B. 后10条记录 C. 前10%条记录 D. 后10%条记录 - **答案**: A - **解析**: `SELECT TOP 10` 用于限制查询结果的...
10. **修改表结构的命令**:在T-SQL中,修改表结构使用ALTER TABLE命令。 11. **视图的性质**:视图不实际存储数据,而是基于查询结果的虚拟表,可以用于数据检索、权限控制等,但不支持直接的插入、修改和删除操作...
4. **T-SQL 分析语句**: - **新增功能**:包括PIVOT, UNPIVOT, RANK 等。 - **意义**:提供了更为强大的数据聚合与排序功能,方便进行复杂的数据分析。 5. **NUMA 支持**: - **介绍**:支持非统一内存访问架构...
1. T-SQL中,`HOST_NAME()`函数用于返回主机名,而`DB_NAME()`返回当前数据库的名称,`GET_DATE()`获取当前日期和时间,`UPPER()`将字符串转换为大写。因此,返回主机名的函数是B. `HOST_NAME()`。 2. `CREATE ...
- **3P** - 创建三维多段线 - **AL** - 对齐 (在三维空间中) - **AP** - 加载应用程序 - **AA** - 计算面积和周长 (在三维空间) - **AR** - 阵列 (创建多重对象拷贝) - **AAD** - 外部数据库命令管理 - **AEX** - ...