2013-04-12 8 views
5

Mam tabelę o dwóch kolumnach (date_ID, entry_Date). Chcę wstawić wszystkie daty w określonym przedziale czasowym do tabeli (np. Daty wszystkich dat w latach 2002-2030). Czy jest jakiś sposób, aby to zrobić za pomocą pętli w SQL-Server?Wstaw wszystkie daty w przedziale czasowym w tabeli

+1

Chcę tylko powiedzieć, że jest fajnie, że są trzy sposoby na wykonanie 100% różnych zadań, do których SQL nie jest przeznaczony, haha ​​:) – Patashu

Odpowiedz

4

Spróbuj

DECLARE @d date='20020101' 
WHILE @d<'20300101' 
    BEGIN 
     INSERT INTO dbo.Dates (entry_Date) 
     VALUES (@d) 
     SET @d=DATEADD(DAY,1,@d) 
    END 
GO 
+0

wielkie dzięki, kolego – AfterGlow

+0

@SreeragNs Serdecznie zapraszamy))) –

0
insert into table values(date_ID,(select entry_Date from table where entry_Date between 01/01/2002 and 01/01/2030)) 

Wypróbuj tego rodzaju zapytanie.

W miejsce date_ID ustaw odpowiednią wartość.

4

ten powinien zrobić:

WITH TestItOut AS 
(
    SELECT CAST('2002-01-01' as datetime) DateColumn 
    UNION ALL 
    SELECT DateColumn + 1 
    FROM TestItOut 
    WHERE DateColumn + 1 <= '2030-12-31' 
) 

INSERT INTO YourTable (ColumnName) 
SELECT DateColumn 
FROM TestItOut 
OPTION (MAXRECURSION 0) 
2

w oracle zrobiłbym

insert into sometable 
select to_date('01/01/2013','dd/mm/yyyy') + level 
from dual 
connect by level < 10001 

ten wygeneruje 10000 pochodzi z 1/1/13 z Dzienny interwał. jeśli chcesz przedział godzinowy na przykład, możesz po prostu zmienić + level na + level/24.

jest to podstawowe zapytanie hierarchiczne ANSI sql - powinno również działać na serwerze SQL.

+0

+1 ale "połącz przez" nie jest ANSI sql. –

+0

, ale istnieje w SQL Server, prawda? – haki

+0

Nie sądzę. SQL-Server ma hierarchiczne zapytania z CTE (i Oracle, oprócz składni 'CONNECT BY'). Jak odpowiedź McCee. –

Powiązane problemy