關於Sybase資料庫中時間表的建立和生成!
--時間維度表或者時間基礎表
CREATE TABLE DimTime (
TimeKey NUMERIC(18,0) IDENTITY ,
FullDateAlternateKey DATETIME NULL ,
DayNumberOfWeek TINYINT NULL ,
EnglishDayNameOfWeek VARCHAR(10) NULL ,
SpanishDayNameOfWeek VARCHAR(10) NULL ,
FrenchDayNameOfWeek VARCHAR(10) NULL ,
DayNumberOfMonth TINYINT NULL ,
DayNumberOfYear SMALLINT NULL ,
WeekNumberOfYear TINYINT NULL ,
EnglishMonthName VARCHAR(10) NULL ,
SpanishMonthName VARCHAR(10) NULL ,
FrenchMonthName VARCHAR(10) NULL ,
MonthNumberOfYear TINYINT NULL ,
CalENDarQuarter TINYINT NULL ,
CalENDarYear CHAR(4) NULL ,
CalENDarSemester TINYINT NULL ,
FiscalQuarter TINYINT NULL ,
FiscalYear CHAR(4) NULL ,
FiscalSemester TINYINT NULL
)
go
--時間儲存過程
CREATE PROCEDURE p_create_DATETIME
@BeginStr VARCHAR(20) = NULL,
@EndStr VARCHAR(20) = NULL,
@FiscalStartStr VARCHAR(20) = NULL
AS
/*
@BeginStr define the BeginDate created,default will be maxdate FROM dimtime table,format is 'yyyy-mm-dd'
@EndStr define the EndDate created,default will the END date of this year,format is 'yyyy-mm-dd'
@FiscalStartStr define the BeginDate created,default will be '01-01',format is 'mm-dd'
關於財年的計算有點問題,是否1~6月份開始算成當年財年,而7~12月份的算成第二年的財年,也許還需要增加標誌位
*/
DECLARE
@TmpBeginStr VARCHAR(20),
@TmpEndStr VARCHAR(20),
@TmpFiscalStartStr VARCHAR(20),
@BeginDate DATETIME,
@EndDate DATETIME,
@FiscalStartDate DATETIME,
@FiscalBaseDate DATETIME,
@DateDiffer INT
SELECT @TmpBeginStr = @BeginStr
SELECT @TmpEndStr = @EndStr
SELECT @TmpFiscalStartStr = @FiscalStartStr
IF @TmpBeginStr IS NULL
BEGIN
SELECT @BeginDate = DATEADD(dd,1,MAX(FullDateAlternateKey)) FROM DimTime
IF @BeginDate IS NULL
BEGIN
SELECT @TmpBeginStr = CONVERT(VARCHAR(20),getdate(),110)
SELECT @BeginDate = CONVERT(DATETIME,@TmpBeginStr)
END
END
else
BEGIN
SELECT @BeginDate = CONVERT(DATETIME,@TmpBeginStr)
END
IF @TmpEndStr IS NULL
BEGIN
SELECT @TmpEndStr = DATENAME(yy,getdate())+'-12-31'
END
SELECT @EndDate = CONVERT(DATETIME,@TmpEndStr)
IF @TmpFiscalStartStr IS NULL
BEGIN
SELECT @TmpFiscalStartStr = '01-01'
END
SELECT @TmpFiscalStartStr = DATENAME(yy,getdate())+ '-' + @TmpFiscalStartStr
SELECT @FiscalStartDate= CONVERT(DATETIME,@TmpFiscalStartStr)
SELECT @DateDiffer = DATEDIFF(dd,CONVERT(DATETIME,DATENAME(yy,getdate())+'-01-01'),@TmpFiscalStartStr)
SELECT @FiscalBaseDate = DATEADD(dd,-@DateDiffer,@BeginDate)
DELETE FROM DimTime WHERE FullDateAlternateKey >=@BeginDate and FullDateAlternateKey < @EndDate
WHILE @BeginDate < @EndDate
BEGIN
INSERT INTO DimTime
(
--TimeKey , --NUMERIC
FullDateAlternateKey, --DATETIME
DayNumberOfWeek, --TINYINT
EnglishDayNameOfWeek , --VARCHAR
SpanishDayNameOfWeek, --VARCHAR
FrenchDayNameOfWeek , --VARCHAR
DayNumberOfMonth , --TINYINT
DayNumberOfYear , --SMALLINT
WeekNumberOfYear , --TINYINT
EnglishMonthName , --VARCHAR
SpanishMonthName , --VARCHAR
FrenchMonthName , --VARCHAR
MonthNumberOfYear , --TINYINT
CalENDarQuarter , --TINYINT
CalENDarYear , --CHAR
CalENDarSemester , --TINYINT
FiscalQuarter , --TINYINT
FiscalYear , --CHAR
FiscalSemester --TINYINT
)
VALUES
(
--indetity TimeKey ,
@BeginDate,
DATEPART (dw , @BeginDate ) ,
DATENAME (dw , @BeginDate ) ,
'',
'',
DATEPART (dd , @BeginDate ) ,
DATEPART (dy , @BeginDate ) ,
DATEPART (wk , @BeginDate ) ,
DATENAME (mm , @BeginDate ) ,
'',
'',
DATEPART (mm, @BeginDate ) ,
DATEPART (qq , @BeginDate ) ,
CAST(DATEPART (yy , @BeginDate ) AS CHAR(4)),
(DATEPART (mm , @BeginDate )+5)/6 ,
DATEPART (qq , @FiscalBaseDate) ,
CAST(DATEPART (yy , @FiscalBaseDate) AS CHAR(4)),
(DATEPART (mm , @FiscalBaseDate)+5)/6
)
SELECT @BeginDate = dateadd(dd,1,@BeginDate)
SELECT @FiscalBaseDate = dateadd(dd,1,@FiscalBaseDate)
END
--執行方法
exec p_create_DATETIME NULL,NULL , '01-15'
exec p_create_DATETIME '2006-01-01','2006-10-02', '01-15'
SELECT * FROM DimTime
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-145433/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sybase資料庫空間相關資料庫
- sybase 的裝置和資料庫,是啥關係?資料庫
- 關於資料庫表記錄主鍵生成的問題?資料庫
- 2.1 關於建立資料庫資料庫
- 2.5.1 關於建立資料庫的子句資料庫
- SQL建立資料庫和表SQL資料庫
- DB2建立資料庫,建立表空間DB2資料庫
- 關於表空間和表的關係
- 關於ORACEL與異構資料庫之間建立dblink資料庫
- 達夢(DM)資料庫的表空間建立和遷移維護資料庫
- 關於建立DataGuard Physical Standby資料庫資料庫
- 建立資料庫表資料庫
- Sybase資料庫安全資料庫
- MySQL 建立資料庫 建立表MySql資料庫
- 基於資料庫表結構建立帶 getter 和 setter 方法的 Model資料庫
- 資料庫和表空間資料移動資料庫
- 關於Oracle資料庫的時間查詢Oracle資料庫
- .net檔案的建立和web.config 關於資料庫Web資料庫
- 關於資料庫表的設計步驟資料庫
- 關於大資料和資料庫的討論大資料資料庫
- 關於InnoDB表資料和索引資料的儲存索引
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- 資料庫 建立 3表資料庫
- hibernate 於sybase資料庫的問題-尋求答案資料庫
- sybase資料庫恢復資料庫
- 常見資料庫SYBASE和SQL SERVER的比較資料庫SQLServer
- jive的資料庫sybase7資料庫
- 2.5.9 在資料庫建立期間支援大檔案表空間資料庫
- Oracle - 資料庫的例項、表空間、使用者、表之間關係Oracle資料庫
- 關於SQL Server 映象資料庫快照的建立及使用SQLServer資料庫
- Oracle建立表空間、建立資料庫使用者、賦許可權Oracle資料庫
- oracle中的資料庫、使用者、方案、表空間、表物件之間的關係Oracle資料庫物件
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- sybase iq 資料庫 問題資料庫
- 在 mysql 下 建立新的資料庫和對應的表MySql資料庫
- 理解Sybase ASE資料庫中的索引資料庫索引
- Sybase ASE資料庫的license問題資料庫
- 2.3.2 關於使用互動式DBCA建立資料庫資料庫