如何在 SQL Server 中填充我的日期维度表以获得具有此特定值的列?

Posted

技术标签:

【中文标题】如何在 SQL Server 中填充我的日期维度表以获得具有此特定值的列?【英文标题】:How do I populate my Date Dimension Table in SQL Server so as to get a column with this specific value? 【发布时间】:2015-08-05 14:27:14 【问题描述】:

我在 SQL Server 2014 中运行以下查询以填充名为 DateDimension 的表。

DECLARE @startdate datetime
   DECLARE @enddate datetime
SET @startdate = '01/01/2000'
   SET @enddate = '12/31/2018'
DECLARE @loopdate datetime
   SET @loopdate = @startdate
WHILE @loopdate <= @enddate
   BEGIN
INSERT INTO DateDimension VALUES (
   Day(@loopdate),
   Month(@loopdate), 
   Year(@loopdate), 
   CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 3 -- Since Financial Year starts in July, January to March is considered as Quarter 3
   WHEN Month(@loopdate) IN (4, 5, 6) THEN 4
   WHEN Month(@loopdate) IN (7, 8, 9) THEN 1
   WHEN Month(@loopdate) IN (10, 11, 12) THEN 2
   END,
   @loopdate,
   CONVERT(VARCHAR(10),@loopdate,111) 
   ) 

   SET @loopdate = DateAdd(d, 1, @loopdate)
   END

当前表的提取,运行上述查询后如下:

id  Day Month   Year quarter    date        datevarchar
1   1   1       2000    3    2000-01-01       1/1/2000
2   2   1       2000    3    2000-01-02       1/2/2000
3   3   1       2000    3    2000-01-03       1/3/2000
4   4   1       2000    3    2000-01-04       1/4/2000
5   5   1       2000    3    2000-01-05       1/5/2000

我需要“季度”列显示其值如下:

   quarter
  Qr 3 2000

如果“季度”列保持原样并添加一个新列来显示我所追求的,那就更好了。我该怎么做?

【问题讨论】:

通过连接“Qr”和年份。非常基础。 你到底在问什么?您有特定问题吗?您已经有一个生成值的脚本。您需要做的就是在表格中添加另一列并在脚本中添加正确的表达式。 【参考方案1】:

在运行查询之前,您需要先将列添加到 DateDimension 表中。它将是一个 varchar(9) 列。

DECLARE @startdate datetime
   DECLARE @enddate datetime
SET @startdate = '01/01/2000'
   SET @enddate = '12/31/2018'
DECLARE @loopdate datetime
   SET @loopdate = @startdate
WHILE @loopdate <= @enddate
   BEGIN
INSERT INTO DateDimension VALUES (
   Day(@loopdate),
   Month(@loopdate), 
   Year(@loopdate), 
   CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 3 -- Since Financial Year starts in July, January to March is considered as Quarter 3
   WHEN Month(@loopdate) IN (4, 5, 6) THEN 4
   WHEN Month(@loopdate) IN (7, 8, 9) THEN 1
   WHEN Month(@loopdate) IN (10, 11, 12) THEN 2
   END,
   @loopdate,
   CONVERT(VARCHAR(10),@loopdate,111),
   CASE WHEN Month(@loopdate) IN (1, 2, 3) THEN 'Qr 3 ' + CONVERT(VARCHAR(4),Year(@loopdate))
   WHEN Month(@loopdate) IN (4, 5, 6) THEN 'Qr 4 ' + CONVERT(VARCHAR(4),Year(@loopdate))
   WHEN Month(@loopdate) IN (7, 8, 9) THEN 'Qr 1 ' + CONVERT(VARCHAR(4),Year(@loopdate))
   WHEN Month(@loopdate) IN (10, 11, 12) THEN 'Qr 2 ' + CONVERT(VARCHAR(4),Year(@loopdate))
   END
   ) 

   SET @loopdate = DateAdd(d, 1, @loopdate)
   END

【讨论】:

太棒了!非常感谢!

以上是关于如何在 SQL Server 中填充我的日期维度表以获得具有此特定值的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中创建具有数十年的日期维度?

如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]

如何使用 SQL Server 通过 ETL 存储过程提取数据

sql 日期维度表值函数。返回与特定日期相关的日期详细信息。这在推断中特别有用

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

具有日期和类别维度的 SQL 表