2013-04-12 32 views
5

Tôi có một bảng có hai cột (date_ID, entry_Date). Tôi muốn chèn tất cả các ngày trong một khoảng thời gian cụ thể vào bảng (nói ngày tháng tất cả các ngày giữa 2002-2030). Có cách nào để làm điều đó bằng cách sử dụng vòng trong SQL-Server?Chèn tất cả các ngày trong một khoảng thời gian trong một bảng

+1

Tôi chỉ muốn nói làm thế nào mát mẻ là có ba cách khác nhau 100% để thực hiện cùng một nhiệm vụ SQL không thực sự được thiết kế cho, haha ​​:) – Patashu

Trả lời

4

Hãy thử điều này

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

cảm ơn nhiều bạn thân – AfterGlow

+0

@SreeragNs Bạn được chào đón))) –

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

Hãy thử loại truy vấn này.

Thay cho date_ID đặt giá trị phù hợp của bạn.

4

này nên làm điều đó:

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

trong oracle tôi sẽ làm

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

này sẽ tạo ra 10.000 ngày từ 1/1/13 với một khoảng thời gian hàng ngày. nếu bạn muốn có khoảng thời gian theo giờ, ví dụ bạn chỉ có thể thay đổi + level thành + level/24.

đây là truy vấn phân cấp ANSI sql cơ bản - nó cũng hoạt động trong máy chủ SQL.

+0

+1 nhưng 'kết nối bằng' không phải là ANSI sql. –

+0

nhưng nó tồn tại trong SQL Server, phải không? – haki

+0

Tôi không nghĩ vậy. SQL-Server cũng có các truy vấn phân cấp với CTE (và Oracle, bên cạnh cú pháp 'CONNECT BY'). Giống như câu trả lời của McCee. –

Các vấn đề liên quan