แยกชั่วโมงจาก DateTime (SQL Server 2005)


179

ฉันสามารถดึงเดือนและวันโดยใช้,Day(Date()) ฉันไม่สามารถดึงชั่วโมงด้วยMonth(Date()) HOUR(Date())ฉันได้รับข้อผิดพลาดดังต่อไปนี้

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

ฉันจะดึงชั่วโมงได้อย่างไร

คำตอบ:


354
SELECT DATEPART(HOUR, GETDATE());

DATEPART เอกสาร


11
โปรดสะกดสิ่งต่าง ๆ เช่นHOURแทนที่จะใช้ชวเลขขี้เกียจที่ไม่ใช่สิ่งที่คุณคาดหวังเสมอ (ลองy) อย่าลังเลที่จะรักษารหัสของคุณเองตามที่คุณต้องการ แต่สำหรับการสอนฉันไม่เห็นด้วยกับการส่งเสริมการจดชวเลขขี้เกียจที่นำไปสู่ความสับสนหรือแย่ลง ดู # 6 ที่นี่blogs.sqlsentry.com/aaronbertrand/ …และsqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/…
Aaron Bertrand

3
@AaronBertrand นั่นไม่ใช่ "สันหลังยาวขี้เกียจ" มันเป็นเอกสารสั้น ๆ "Lazy" กำลังใช้แบบฟอร์มสั้นที่สั้นกว่าเวอร์ชันเอกสารขั้นต่ำซึ่งอาจใช้งานได้ แต่อาจมีผลกระทบที่ไม่ตั้งใจ
Auspex

3
@Auspex ไม่สามารถบังคับให้คุณไม่พลาดจุดหรืออ่านเหตุผลเบื้องหลังคำพูดของฉัน ไม่ใช่ทุกสิ่งที่บันทึกไว้เป็นแนวทางปฏิบัติที่ดีที่สุด
Aaron Bertrand

5
@AaronBertrand ฉันมีประเด็น แต่คุณกำลังพยายามบังคับใช้ (ตามขอบเขตของการแก้ไขคำตอบของหลายคนอย่างไม่เหมาะสม) มาตรฐานของคุณเอง "แนวปฏิบัติที่ดีที่สุด" ของคุณนั้นไม่ได้จัดประเภท
Auspex

29

... คุณสามารถใช้ได้กับทุกประเภทเช่น:

DATEPART(YEAR, [date])

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])    

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date])

(หมายเหตุ: ฉันชอบ [] รอบคำที่สงวนไว้วันที่แน่นอนว่าในกรณีที่คอลัมน์ที่มีการประทับเวลาของคุณติดป้ายกำกับว่า "วันที่")



9

ลองอันนี้ด้วย:

   DATEPART(HOUR,GETDATE()) 

2

DATEPART(HOUR, [date]) ส่งคืนชั่วโมงในเวลาทหาร (00 ถึง 23) หากคุณต้องการ 01.00 น., 15.00 น. เป็นต้นไปคุณจะต้องดำเนินการดังนี้

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


1
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

โรงงาน


1

ฟังก์ชั่น DATEPART () ใช้เพื่อส่งคืนส่วนหนึ่งของวันที่ / เวลาเช่นปี, เดือน, วัน, ชั่วโมง, นาที, ฯลฯ

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 

ตัวอย่าง

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


-2

คุณต้องใช้ datepart ()

like 


datepart(hour , getdate())

8
การสนับสนุนของคุณคืออะไรซึ่งทำซ้ำข้อมูลที่ให้ไว้ใน "คำตอบ" อื่น ๆ เกือบทุกคำถาม
Cindy Meister
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.