2009-02-19 22 views
23

thể trùng lặp:
Get just the Date from grouping in select from DateTime column in SQL ServerNhận chỉ ngày một phần của DateTime trong MSSQL

Làm thế nào tôi có thể nhận được chỉ là ngày một phần của một DateTime? Tôi đang tìm kiếm một cái gì đó như năm() chức năng nhưng cho cả ngày.

+0

Xem thêm: http://stackoverflow.com/questions/133081/most-efficient-way-in-ms-sql-to-get -date-from-datetime và http://stackoverflow.com/questions/2775/whats-the-best-way-to-remove-the-time-portion-of-a-datetime-value-sql-server – Kristen

Trả lời

28

Các giải pháp bạn muốn là một trong những đề xuất ở đây:

https://stackoverflow.com/a/542802/50776

Về cơ bản, bạn làm như sau:

cast(floor(cast(@dateVariable as float)) as datetime) 

Có một định nghĩa hàm trong liên kết mà sẽ cho phép bạn để củng cố các chức năng và gọi nó bất cứ nơi nào (thay vì phải nhớ nó) nếu bạn muốn.

+0

Tại đây là câu trả lời hay hơn https://stackoverflow.com/questions/113045/how-to-return-only-the-date-from-a-sql-server-datetime-datatype – Adeem

15

Một cách tiện lợi là:

DATEADD(dd, 0, DATEDIFF(dd, 0, [YourDate])) 

nào nhận được số ngày từ NGÀY 0 đến YourDate và thêm nó vào NGÀY 0 để thiết lập đường cơ sở một lần nữa. Phương pháp này (hoặc "dẫn xuất" ở đây) có thể được sử dụng cho một loạt các thao tác ngày khác.

Edit - tính toán ngày khác:

Ngày đầu tiên của tháng:

DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0) 

Ngày đầu tiên của năm:

DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0) 

Ngày đầu tiên của khu phố:

DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0) 

Last Da y của Tháng Trước:

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)) 

cuối Ngày trong tháng hiện tại:

DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate()) + 1, 0)) 

cuối ngày của năm hiện tại:

DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()) + 1, 0)) 

Đầu tiên thứ hai của Tháng:

DATEADD(wk, DATEDIFF(wk, 0, DATEADD(dd, 6 - DATEPART(day, getdate()), getdate())), 0)   

Chỉnh sửa: Đúng, Joe, nó không thêm nó vào NGÀY 0, nó thêm 0 (ngày) vào số ngày mà về cơ bản chỉ chuyển đổi nó trở lại một datetime.

+0

Chia sẻ (khoảng thời gian, số, ngày). .. về cơ bản bạn đang thêm 0 vào đây. .. cast (dateiff (dd, 0, [yourdate]) dưới dạng datetime) – dotjoe

2

này có thể không như slick như một lớp lót, nhưng tôi sử dụng nó để thực hiện ngày thao tác chủ yếu cho các báo cáo:

DECLARE @Date datetime 
SET @Date = GETDATE() 

-- Set all time components to zero 
SET @Date = DATEADD(ms, -DATEPART(ms, @Date), @Date) -- milliseconds = 0 
SET @Date = DATEADD(ss, -DATEPART(ss, @Date), @Date) -- seconds = 0 
SET @Date = DATEADD(mi, -DATEPART(mi, @Date), @Date) -- minutes = 0 
SET @Date = DATEADD(hh, -DATEPART(hh, @Date), @Date) -- hours = 0 

-- Extra manipulation for month and year 
SET @Date = DATEADD(dd, -DATEPART(dd, @Date) + 1, @Date) -- day = 1 
SET @Date = DATEADD(mm, -DATEPART(mm, @Date) + 1, @Date) -- month = 1 

Tôi sử dụng này để có được hàng giờ, hàng ngày, hàng tháng, và ngày hàng năm sử dụng cho các chỉ báo báo cáo và hiệu suất, v.v.

6

Chúng ta có thể sử dụng phương pháp này:

CONVERT(VARCHAR(10), GETDATE(), 120) 

tham số cuối thay đổi định dạng để chỉ để có được thời gian hoặc ngày trong các định dạng cụ thể.

65

này cũng có thể giúp:

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM) 
             -- Oct 2 2008 11:01AM 
SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2008     
SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02   
SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy 
SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy 
SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy 
SELECT convert(varchar, getdate(), 106) -- dd mon yyyy 
SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy 
SELECT convert(varchar, getdate(), 108) -- hh:mm:ss 
SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM) 
             -- Oct 2 2008 11:02:44:013AM 
SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy 
SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd 
SELECT convert(varchar, getdate(), 112) -- yyyymmdd 
SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm 
             -- 02 Oct 2008 11:02:07:577  
SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h) 
SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) 
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm 
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm 
             -- 2008-10-02T10:52:47.513 
-- SQL create different date styles with t-sql string functions 
SELECT replace(convert(varchar, getdate(), 111), '/', ' ') -- yyyy mm dd 
SELECT convert(varchar(7), getdate(), 126)     -- yyyy-mm 
SELECT right(convert(varchar, getdate(), 106), 8)   -- mon yyyy 

The Source

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