Trừ một ngày khỏi datetime


102

Tôi có một truy vấn để tìm nạp ngày khác nhau giữa 2 datetime như:

SELECT DATEDIFF(DAY, @CreatedDate , GETDATE())

Ex :

SELECT DATEDIFF(DAY, '2013-03-13 00:00:00.000' , GETDATE())

Tôi cần có một công việc truy vấn như thế này sẽ trừ một ngày từ ngày đã tạo:

SELECT DATEDIFF(DAY, **@CreatedDate- 1** , GETDATE())

1
Tại sao không chỉ thêm 1 vào kết quả?
Damien_The_Un Believer

Nếu trừ 1 từ kết quả cho ra câu trả lời mong muốn, thì câu hỏi bạn đặt ra có vẻ sai, vì việc trừ vào kết quả tương đương với việc cộng một số ngày vào đầu ngày.
Damien_The_Un Believer

Sau đó, biểu thức bạn đã đăng khi trả lời đầu tiên của bạn cho tôi là biểu thức mà tôi sẽ sử dụng - bạn có thể đăng nó như một câu trả lời, nhưng như tôi nói, điều đó có nghĩa là câu hỏi của bạn không thực sự chính xác ( DATEDIFFtừ giữa 2003-03-12đến hôm nay là 14 , không phải 12).
Damien_The_Un Believer

Vâng..bạn đúng..nó hoạt động ngược lại với kết quả ..
James

Câu trả lời:


124

Thử cái này

SELECT DATEDIFF(DAY,  DATEADD(day, -1, '2013-03-13 00:00:00.000'), GETDATE())

HOẶC LÀ

SELECT DATEDIFF(DAY,  DATEADD(day, -1, @CreatedDate), GETDATE())

3
Theo câu trả lời từ Philip Rego, bạn có thể sử dụng SELECT GETDATE () - 1 để trừ ngày cho một ngày.
José Barbosa

44

Tôi không chắc về chính xác những gì bạn đang cố gắng thực hiện, nhưng tôi nghĩ hàm SQL này sẽ giúp bạn:

SELECT DATEADD(day,-1,'2013-04-01 16:25:00.250')

Trên sẽ cung cấp cho bạn 2013-03-31 16:25:00.250.

Nó sẽ đưa bạn quay lại đúng một ngày và hoạt động trên mọi định dạng ngày-giờ hoặc ngày tiêu chuẩn.

Hãy thử chạy lệnh này và xem nó có cung cấp cho bạn những gì bạn đang tìm kiếm hay không:

SELECT DATEADD(day,-1,@CreatedDate)

33

Để chỉ cần trừ một ngày cho ngày thường:

Select DATEADD(day,-1,GETDATE())

(bài gốc được sử dụng -7 và không chính xác)


24

Rõ ràng bạn có thể trừ số ngày bạn muốn cho một ngày giờ.

SELECT GETDATE() - 1

2016-12-25 15:24:50.403

6

Điều này sẽ hoạt động.

select DATEADD(day, -1, convert(date, GETDATE()))


1

Hãy thử điều này, có thể điều này sẽ giúp bạn

SELECT DATEDIFF(DAY, DATEADD(DAY,-1,'2013-03-13 00:00:00.000') , GETDATE())

1

Thành thật mà nói, tôi chỉ sử dụng:

select convert(nvarchar(max), GETDATE(), 112)

mà cho YYYYMMDDvà trừ một từ nó.

Hay nói đúng hơn

select convert(nvarchar(max), GETDATE(), 112) - 1 

cho ngày yesterdays.

Thay thế Getdate()bằng giá trị của bạnOrderDate

select convert(nvarchar (max),OrderDate,112)-1 AS SubtractDate FROM Orders

Hãy làm nó.


-1

Bạn có thể thử điều này.

Dấu thời gian = 2008-11-11 13: 23: 44,657;

SELECT DATE_SUB(OrderDate,INTERVAL 1 DAY) AS SubtractDate FROM Orders

sản lượng: 2008-11-10 13: 23: 44,657

Tôi hy vọng, nó sẽ giúp giải quyết vấn đề của bạn.


2
Máy chủ SQL. Không hỗ trợ INTERVALhoặc DATE_SUB.
Damien_The_Un Believer

CHỌN NGÀYADD (ngày, 45, Ngày đặt hàng) TỪ Đơn đặt hàng. Bạn hiểu chưa?
chintan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.