2013-04-12 7 views
5

2つの列(date_ID,entry_Date)を持つテーブルがあります。特定の期間内のすべての日付を表に挿入したいとします(2002年から2030年までのすべての日付)。 SQL Serverでループを使用する方法はありますか?期間内のすべての日付をテーブルに挿入します。

+1

Iちょうどハハ、それは本当にのために設計されていない同じタスクのSQLを実行するための3つの100%の異なった方法があるということですどのようにクール言いたい:) – Patashu

答えて

4

この

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

おかげでたくさんの仲間あなたが歓迎されている – AfterGlow

+0

@SreeragNs))) –

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

この種のクエリを試してみてください。

date_IDの代わりに、適切な値を入力します。

4

を試してみてくださいこれはそれを行う必要があります。

はOracleで
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

私は1/1/13から10000の日付を生成します

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

これを行うだろう毎日の間隔。たとえば、時間間隔が必要な場合は、+ level+ level/24に変更するだけです。

これは基本的なANSI SQL階層型クエリです。SQL Serverでも同様に動作します。

+0

+1ですが、 'connect by'はANSI SQLではありません。 –

+0

それはSQL Serverに存在します。 – haki

+0

私はそうは思わない。 SQL Serverには、CTE(および、CONNECT BY構文以外のOracleも)を使用した階層的なクエリがあります。マッシーの答えのように。 –

関連する問題