2010-07-19 72 views
8

Cách tốt nhất để loại bỏ ngày từ DATETIME để chỉ thời gian còn lại để so sánh?Ngày xử lý TSQL từ ngày giờ

Tôi biết tôi có thể làm như sau:

CONVERT(DATETIME, CONVERT(VARCHAR(8), GETDATE(),8)) 

Nhưng điều này liên quan đến việc chuyển đổi và ký tự. Nếu tôi muốn kiểm tra xem một thời gian (bao gồm cả phút) là giữa hai lần khác được lưu trữ trong các cột DATETIME, có một cách thanh lịch để làm điều này mà không cần phải dựa vào chuyển đổi thành chuỗi ký tự?

+0

giá trị 'DATETIME' sẽ thay đổi ays có một yếu tố ngày (đầu mối trong tên :) vì vậy cách duy nhất để loại bỏ ngày "chỉ có thời gian còn lại" là bỏ nó thành một loại không có phần tử ngày tức là câu trả lời của @Mike M. – onedaywhen

+0

Tôi nên có quy định rằng phần mềm của chúng tôi sử dụng SQL2005 (và được thiết kế trong thời đại của SQL2000 để datatype TIME, đó là một tính năng mới của SQL2008 không phải là một giải pháp khả thi. Nếu bạn nhìn vào câu trả lời đã được đánh dấu đúng, bạn ' Sẽ thấy một giải pháp thanh lịch – t3rse

Trả lời

9

Hãy thử chức năng TimeOnly từ Essential SQL Server Date, Time, and DateTime Functions:

create function TimeOnly(@DateTime DateTime) 
returns datetime 
as 
    begin 
    return dateadd(day, -datediff(day, 0, @datetime), @datetime) 
    end 
go 

Hoặc đơn giản là đúc DateTime như Time trong SQL Server 2008:

declare @time as time 
set @time = cast(dateTimeVal as time) 
1
DECLARE 
    @Now DateTime, 
    @Today DateTime, 
    @Time DateTime 

SET @Now = GetDate() 
SET @Today = DateAdd(dd, DateDiff(dd, 0, @Now), 0) 

SET @Time = DateAdd(ss, DateDiff(ss, @Today, @Now), 0) 

SELECT @Time 
+0

Đẹp tuyệt đối tuyệt đối trong một MSDE DB, tôi đã sử dụng tính toán @Today để loại bỏ thời gian từ một ngày đã qua, hoạt động tuyệt vời. – KeithS

11

Nếu bạn đang sử dụng SQL 2008

SELECT CAST(GETDATE() AS TIME) 
Các vấn đề liên quan