2014-12-02 13 views
22

Tôi không thể trừ 30 ngày kể từ ngày hiện tại và tôi là người mới đến SQL Server.Cách trừ 30 ngày kể từ ngày hiện tại bằng cách sử dụng SQL Server

Đây là các dữ liệu trong cột của tôi

date 
------------------------------ 
Fri, 14 Nov 2014 23:03:35 GMT 
Mon, 03 Nov 2014 15:18:00 GMT 
Tue, 11 Nov 2014 01:24:47 GMT 
Thu, 06 Nov 2014 19:13:47 GMT 
Tue, 04 Nov 2014 12:37:06 GMT 
Fri, 1 Nov 2014 00:33:00 GMT 
Sat, 5 Nov 2014 01:06:00 GMT 
Sun, 16 Nov 2014 06:37:12 GMT 

Đối với việc tạo ra các cột trên, chúng tôi sử dụng varchar(50) và bây giờ vấn đề của tôi là tôi muốn hiển thị ngày cho qua 15-20 ngày kể từ cột ngày có thể bất kỳ một giúp đỡ với vấn đề này? cập nhật [làm cách nào tôi có thể hiển thị ngày 7 ngày qua theo thứ tự

+8

[Thói quen xấu để kick: chọn loại dữ liệu sai] (http: // sqlblog. com/blogs/aaron_bertrand/archive/2009/10/12/xấu-thói quen-để-kick-sử dụng-the-sai-data-type.aspx) - bạn nên luôn luôn sử dụng kiểu dữ liệu thích hợp nhất - đó là những gì họ đang ở đó, sau khi tất cả! Nếu bạn muốn lưu trữ ngày tháng, sử dụng 'DATE', hoặc' DATETIME2 (n) '- nhưng chắc chắn nhất ** NOT ** một cột' varchar'! –

+0

hey nó thực sự là người đàn ông hữu ích thanx cho các thông tin và tôi đang cập nhật cột của tôi – Madpop

Trả lời

45

Bạn có thể chuyển đổi số này thành datetime và sau đó sử dụng DATEADD(DAY, -30, date).

Xem here.

chỉnh sửa

tôi nghi ngờ nhiều người đang tìm kiếm câu hỏi này vì họ muốn trừ từ ngày hiện tại (như là tiêu đề của câu hỏi, nhưng không phải những gì OP dự định). Nhận xét của munyul bên dưới trả lời câu hỏi cụ thể hơn. Kể từ khi bình luận được coi là thanh tao (có thể bị xóa tại bất kỳ điểm nào), tôi sẽ lặp lại nó ở đây:

DATEADD(DAY, -30, GETDATE()) 
+5

Cảm ơn. 'DATEADD (DAY, -30, GETDATE())' hoạt động như một nét duyên dáng ... – munyul

+0

Đơn giản và rực rỡ! – Hans

+0

Đối với bất cứ ai tự hỏi, bạn có thể hoán đổi NGÀY trong phương thức với MONTH để làm tương tự cho một sự khác biệt tháng. Tôi muốn tưởng tượng bất kỳ giá trị datetime hợp lệ sẽ làm việc. – MattD

1
SELECT DATEADD(day,-30,date) AS before30d 
FROM... 

Nhưng nó được khuyến khích mạnh mẽ để giữ ngày trong cột datetime, không varchar.

7

TRY NÀY:

Truyền giá trị VARCHAR của bạn đến DATETIME và cộng -30 để trừ. Ngoài ra, trong sql-server định dạng Thứ Sáu, ngày 14 tháng 11 năm 2014 23:03:35 GMT không được chuyển đổi thành DATETIME. Hãy thử substring cho nó:

SELECT DATEADD(dd, -30, 
     CAST(SUBSTRING ('Fri, 14 Nov 2014 23:03:35 GMT', 6, 21) 
     AS DATETIME)) 
4

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

SELECT  GETDATE(), 'Today' 
UNION ALL 
SELECT  DATEADD(DAY, 10, GETDATE()), '10 Days Later' 
UNION ALL 
SELECT  DATEADD(DAY, –10, GETDATE()), '10 Days Earlier' 
UNION ALL 
SELECT  DATEADD(MONTH, 1, GETDATE()), 'Next Month' 
UNION ALL 
SELECT  DATEADD(MONTH, –1, GETDATE()), 'Previous Month' 
UNION ALL 
SELECT  DATEADD(YEAR, 1, GETDATE()), 'Next Year' 
UNION ALL 
SELECT  DATEADD(YEAR, –1, GETDATE()), 'Previous Year' 

Result Set:

———————– ————— 
2011-05-20 21:11:42.390 Today 
2011-05-30 21:11:42.390 10 Days Later 
2011-05-10 21:11:42.390 10 Days Earlier 
2011-06-20 21:11:42.390 Next Month 
2011-04-20 21:11:42.390 Previous Month 
2012-05-20 21:11:42.390 Next Year 
2010-05-20 21:11:42.390 Previous Year 
Các vấn đề liên quan