【发布时间】:2018-12-06 07:48:06
【问题描述】:
在我的旧数据库中,有一个表 Album 存储有关 ID、AlbumName、Release_Date(例如 01/01/2017)等信息。
我想将Release_Date进一步分解为时间维度表,所以我创建了一个DimDateAlbum表。
这是我创建的时间维度表。
CREATE TABLE [DimDateAlbum]
(
[DateKey] INT PRIMARY KEY,
[Date] DATETIME NOT NULL,
[Year] INT NOT NULL,
[Quarter] TINYINT NOT NULL,
[QuarterName] VARCHAR(6) NOT NULL, -- January to March: First, April to
June: Second etc
[Month] TINYINT NOT NULL,
[MonthName] VARCHAR(9) NOT NULL, -- January, February etc
[Day] TINYINT NOT NULL, -- Field holds day number of Month
[DayofWeek] TINYINT NOT NULL,
[WeekName] VARCHAR(9) NOT NULL, -- Field displays 1: Monday, 2: Tuesday etc
)
如下所述:我可以将Release_Date 作为[DateKey] 插入到时间维度表中,但是,如何进一步将日期分解为年、季度、日等?
INSERT INTO DimDateAlbum
SELECT
a.Release_Date AS [DateKey],
CONVERT (char(8), a.Release_Date, 112) AS [DateKey],
a.Release_Date AS [Date],
DATEPART(YEAR, a.Release_Date) AS [Year], -- calendar year
DATEPART(QQ, a.Release_Date) AS [Quarter], -- calendar quarter
CASE (qq, a.Release_Date)
WHEN 1 THEN 'First'
WHEN 2 THEN 'Second'
WHEN 3 THEN 'Third'
WHEN 4 THEN 'Fourth'
END AS [QuarterName],
DATEPART(MONTH, a.Release_Date) AS [Month], -- month number of the year
DATENAME(MM, a.Release_Date) AS [MonthName], -- month name
DATEPART(DAY, a.Release_Date) AS [Day], -- day number of the month
DATEPART(DW, a.Release_Date) AS [DayofWeek], -- day number of week
CASE datepart(DW, a.Release_Date)
WHEN 1 THEN 'Monday'
WHEN 2 THEN 'Tuesday'
WHEN 3 THEN 'Wednesday'
WHEN 4 THEN 'Thursday'
WHEN 5 THEN 'Friday'
WHEN 6 THEN 'Saturday'
WHEN 7 THEN 'Sunday'
END AS [WeekName]
FROM
dbo.Album AS a
此代码不起作用,有什么解决方法的帮助吗?非常感谢!
【问题讨论】:
-
你的意思是拉 release_date ?我在您的程序中看不到 release_date。
-
我只是在其中粘贴了一张照片。我的意思是我想将 Album(Release_Date) DATETIME 分解为年、季度、月、周等。但是,我不知道如何从 Release_Date 列中提取所有数据并插入 DimDateAlbum。例如,第一个 2017-10-17 应该是:DateKey:20171017, Date Year: 2017, Quarter: 4, QuarterName: Forth, etc...
-
为什么要使用整数 [DateKey] 而您已经将 release_date 作为日期?你应该什么都不做,你的事实表已经可以在 Release_Date = [Date] 上加入时间维度
-
你的意思是我不用创建任何ETL存储过程?抱歉,我是 ETL 的新手,所以我很困惑,因为时间维度表中没有数据,所以我必须先从相册中提取数据..
-
你不应该破坏任何东西。您创建日历,然后将您的表加入其中。而且在结果集中的每一行你都会看到年、季、日,这就是创造DateTime暗淡的感觉
标签: sql-server stored-procedures etl data-warehouse snowflake-cloud-data-platform