2009-07-11 12 views
123

Tôi có thể trích xuất tháng và ngày bằng cách sử dụng Day(Date()), Month(Date()). Tôi không thể trích xuất giờ, với HOUR(Date()). Tôi nhận được lỗi sau đây.Trích xuất giờ từ một DateTime (SQL Server 2005)

'HOUR' is not a recognized built-in function name. 

Làm cách nào để trích xuất giờ?

+0

thể trùng lặp của [T-SQL datetime làm tròn đến phút gần nhất và giờ gần với việc sử dụng các chức năng] (http://stackoverflow.com/questions/6666866/t-sql-datetime -gần-tới-gần-phút-và-gần nhất-giờ-với-sử dụng-chức năng) – Pekka

+3

@Pekka - Trong câu hỏi này, chúng chỉ muốn phần giờ của 'DATETIME'. Câu hỏi được liên kết muốn toàn bộ ngày tháng và thời gian, với phần thời gian được làm tròn thành phút hoặc giờ gần nhất; nó không phải là một bản sao. – Tony

Trả lời

244
SELECT DATEPART(HOUR, GETDATE()); 

DATEPART documentation

+0

Chúa tốt bạn cũng đang sử dụng (loband) :) – TheVillageIdiot

+5

Hãy giải thích những thứ như 'HOUR' thay vì sử dụng viết tắt lười biếng mà không phải lúc nào bạn mong đợi (thử' y').Mặc dù vậy, bạn có thể tự do duy trì mã của riêng mình, nhưng đối với việc dạy học, tôi phản đối việc thúc đẩy *** viết tắt lười biếng dẫn đến nhầm lẫn hoặc tệ hơn. Xem # 6 tại đây http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ và http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

13

Sử dụng datepart.

Ví dụ:

datepart(HOUR, date) 
+0

Hãy giải thích những thứ như 'HOUR' thay vì sử dụng viết tắt lười biếng mà không phải lúc nào bạn mong đợi (thử' y'). Mặc dù vậy, bạn có thể tự do duy trì mã của riêng mình, nhưng đối với việc dạy học, tôi phản đối việc thúc đẩy *** viết tắt lười biếng dẫn đến nhầm lẫn hoặc tệ hơn. Xem # 6 tại đây http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ và http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

8

thử cái này quá:

DATEPART(HOUR,GETDATE()) 
26

... bạn có thể sử dụng nó trên bất kỳ loại granularity ví dụ:

DATEPART(YEAR, [date]) 

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])  

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date]) 

(lưu ý: Tôi thích các [] xung quanh từ dành riêng mặc dù.Tất nhiên đó là trong trường hợp cột của bạn với dấu thời gian được dán nhãn "ngày")

1

Các DATEPART() chức năng được sử dụng để trả lại một phần duy nhất của một ngày/giờ, chẳng hạn như năm, tháng, ngày, giờ, phút, vv

datepart ***Abbreviation 

year  ***yy, yyyy 
quarter  ***qq, q 
month  ***mm, m 
dayofyear ***dy, y 
day   ***dd, d 
week  ***wk, ww 
weekday  ***dw, w 
hour  ***hh 
minute  ***mi, n 
second  ***ss, s 
millisecond ***ms 
microsecond ***mcs 
nanosecond ***ns 

Ví dụ

select * 
from table001 
where datepart(hh,datetime) like 23 
0

bạn phải sử dụng datepart()

like 


datepart(hour , getdate()) 
+4

Điểm đóng góp của bạn là gì, lặp lại thông tin được cung cấp trong hầu hết các "câu trả lời" khác cho câu hỏi này? –

+0

Bạn đã làm rất tốt! – JanLeeYu

0

tôi không thể trích xuất giờ, với gIỜ (Date())

Có một cách để gọi HOUR (Tôi sẽ không khuyên bạn nên sử dụng nó mặc dù bởi vì có DATEPART chức năng) sử dụng ODBC Scalar Functions:

SELECT {fn HOUR(GETDATE())} AS hour 

LiveDemo

0

DATEPART(HOUR, [date]) trả về giờ trong thời gian quân sự (00 đến 23) Nếu bạn muốn 1AM, 3PM vv, bạn cần phải giải quyết nó:

SELECT Run_Time_Hour = 
CASE DATEPART(HOUR, R.date_schedule) 
    WHEN 0 THEN '12AM' 
    WHEN 1 THEN '1AM' 
    WHEN 2 THEN '2AM' 
    WHEN 3 THEN '3AM' 
    WHEN 4 THEN '4AM' 
    WHEN 5 THEN '5AM' 
    WHEN 6 THEN '6AM' 
    WHEN 7 THEN '7AM' 
    WHEN 8 THEN '8AM' 
    WHEN 9 THEN '9AM' 
    WHEN 10 THEN '10AM' 
    WHEN 11 THEN '11AM' 
    WHEN 12 THEN '12PM' 
    ELSE CONVERT(varchar, DATEPART(HOUR, R.date_schedule)-12) + 'PM' 
END 
FROM 
    dbo.ARCHIVE_RUN_SCHEDULE R 
0
select case when [am or _pm] ='PM' and datepart(HOUR,time_received)<>12 
      then dateadd(hour,12,time_received) 
      else time_received 
     END 
from table 

làm việc