1

Créer une table avec les colonnes suivantesécrire une requête pour remplir le tableau ci-dessus partir du 1er janvier 2008 au 31 décembre 2014

DateId, Date, Day_Name, Day_of_Week, Day_of_Month, Day_of_Year, 
Mon… _Name, Quarter_of_Year, Year_Name,Year 

écrire une requête pour remplir le tableau ci-dessus partir du 1er janvier 2008 au 31 décembre 2014

DECLARE @DATE smalldatetime 
DECLARE @DATESTART smalldatetime 
DECLARE @DATEEND smalldatetime 

SET @DATESTART = '01-01-2008' 
SET @DATEEND = '12-31-2014' 

--SET @DATE = @DATESTART 

DECLARE @days int 
DECLARE @index int = 1 

SET @days= DATEPART(dayofyear, @DATEEND) - DATEPART(dayofyear, @DATESTART) 

SELECT @days 
WHILE() 
INSERT INTO [BI_Database].[dbo].[Date_ 
Range] 
([Date],[Day_Name],[Day_of_Week],[Day_of… 
VALUES(<Date, datetime,>,<Day_Name, nvarchar(50),>,<Day_of_Week, smallint,>,<Day_of_Month, smallint,>,<Day_of_Year, smallint,>,<Month_Name, nvarchar(50),> 
,<Month_of_Year, smallint,>,<Quarter_Name, nvarchar(50),>,<Quarter_of_Year, nvarchar(50),>,<Year_Name, nvarchar(50),>,<Year, smallint,>) 
+0

vous pouvez utiliser tout boucle ... – Milen

+0

pourquoi voudriez-vous stocker toutes ces informations sur une date où il est déjà contenu dans la date? Aussi ce que le bip est un nom d'année? –

+0

@ t-clausen.dk - "Année du Dragon"? "Année du Rat"? Sans voir la définition de la table, je suis d'accord que c'est difficile, mais il n'est pas difficile de comprendre que certaines cultures * nomment * leurs années. –

Répondre

1

Essayez ceci, malheureusement je n'avais aucune idée de quoi remplir nom_année avec. J'ai utilisé une table temporaire, cela peut être remplacé par votre propre table

create table #t 
(DateId int identity(1,1), Date date, Day_Name varchar(8), 
Day_of_Week smallint, Day_of_Month smallint, Day_of_Year int, 
Mon_Name varchar(12), Quarter_of_Year smallint, Year_Name varchar(30), 
Year int) 

insert #t 
(Date,Day_Name,Day_of_Week,Day_of_Month,Day_of_Year,Mon_Name, 
Quarter_of_Year, Year_Name, Year) 
select Date1 Date 
,datename(weekday, date1) Day_Name 
,datediff(day, 0, date1) %7 + 1 Day_of_Week 
,day(date1) Day_of_Month 
,datepart(dy, date1) Day_of_Year 
,datepart(mm, date1) Mon_Name 
,datepart(qq, date1) Quarter, 
null Year_Name, -- don't know what you want here 
year(date1) year 
from 
master..spt_values v1 
cross join 
(select 0 mul union all select 1 union all select 2) m 
cross apply 
(select dateadd(day, v1.number+ 2048 * mul,'2008-01-01') date1) a 
where date1 <= '2014-12-31' 
and type = 'P' 

select * from #t 
drop table #t 
2

Cela devrait le faire:

DECLARE @DATESTART smalldatetime 
DECLARE @DATEEND smalldatetime 

SET @DATESTART = '01-01-2008' 
SET @DATEEND = '12-31-2014' 

;WITH cte4 As (Select 0 As N Union All Select 1 Union All Select 2 Union All Select 4) 
, cte64 As (Select 0 As N From cte4 n0, cte4 n1, cte4 n2) 
, cte4k As (Select ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) As N From cte64 n0, cte64 n1) 
, cteDate As (Select N, CAST(@DATESTART+N-1 As smalldatetime) As date_ From cte4k) 
INSERT INTO [BI_Database].[dbo].[Date_Range] 
([Date],Day_Name,Day_of_Week,Day_of_Week,Day_of_Month,Day_of_Year,Month_Name,Month_of_Year, 
Quarter_Name,Quarter_of_Year,Year_Name,[Year]) 
SELECT 
    N       As DateId, 
    date_      As [Date], 
    DATENAME(WEEKDAY, date_) As Day_Name, 
    DATEPART(WEEKDAY, date_) As Day_of_Week, 
    Day(date_)     As Day_of_Month, 
    DATEPART(DAYOFYEAR, date_) As Day_of_Year, 
    DATENAME(MONTH, date_)  As Month_Name, 
    MONTH(date_)    As Month_of_Year, 
    DATENAME(QUARTER, date_) As Quarter_Name, 
    DATEPART(QUARTER, date_) As Quarter_of_Year, 
    DATENAME(YEAR, date_)  As Year_Name, 
    YEAR(date_)     As [Year] 
FROM cteDate 
WHERE date_ BETWEEN @DATESTART AND @DATEEND 

Note: Fonctionne uniquement pour SQL Server 2005+,

Questions connexes