2012-02-16 22 views
7
CAST(DATEPART(hh, timestamp) AS varchar(2)) + ':00' AS Hour 

Điều này sẽ giúp tôi hết giờ trong trường dấu thời gian nhưng trong trường hợp giờ 0-9 nó không tạo ra số 0 đứng đầu và do đó khi tôi sắp xếp theo giờ giảm dần nó không sắp xếp đúng.sql cast hour out of datetime mà không phải giảm số 0 hàng đầu vào một số giờ

Bạn không chắc chắn điều gì sai ở đây. Tôi chỉ định một varchar 2 char để cho phép thêm phòng cho số không hàng đầu. Hy vọng rằng có một cách để khắc phục điều này mà không đi qua lĩnh vực của tôi thông qua một chức năng mà sẽ pad số không hàng đầu cho tôi.

Trả lời

16
SELECT RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(HOUR, GETDATE())), 2) + ':00'; 

Không muốn ghi bằng 0? OK, bạn có thể làm điều đó một cách xấu xí tương tự mà không có sự lộn xộn padding:

SELECT LEFT(CONVERT(TIME(0), GETDATE()), 2) + ':00'; 

Rõ ràng thay GETDATE() với tên cột của bạn. Mà tôi hy vọng không thực sự là timestamp bởi vì đây là một từ dành riêng - cho một kiểu dữ liệu mà không có gì để làm với ngày tháng hoặc thời gian, thật đáng buồn.

Nếu bạn không thích một trong các giải pháp đó, thì chỉ cần chọn dữ liệu từ SQL Server và cho phép ứng dụng khách của bạn xử lý chi tiết định dạng/bản trình bày. Chắc chắn điều này là dễ dàng để làm với C# 's format() chức năng, ví dụ.

+0

bạn đã làm điều đó. Vì vậy, đó là cú pháp nói "lấy đúng hai ký tự của kết quả chuyển đổi và thứ 0 vào đầu"? – TWood

+0

Ví dụ đầu tiên là nói "nối thêm 0 hàng đầu cho giờ, sau đó chọn đúng 2 ký tự" ... và vẫn hợp lệ cho những người dùng trên SQL Server 2005 hoặc thấp hơn, những người không có kiểu dữ liệu 'TIME' mới . –

+0

Để biết thêm chi tiết về thuật ngữ sai 'timestamp', hãy xem http://connect.microsoft.com/SQLServer/feedback/details/274333/ –

3

Giả sử timestamp là một cột trong bảng của bạn

select convert(char(3), timestamp, 108) + '00' AS Hour 
from yourtable 

Alternative

select left(cast(dateadd(hh, datediff(hh, 0, timestamp), 0) as time), 5) 
from yourtable 

Edit:

Sau khi thử nghiệm một chút tôi đi đến kết luận rằng đây là cách nhanh nhất (gần như hiệu suất và cú pháp như giải pháp của Aaron)

SELECT RIGHT(100 + DATEPART(HOUR, timestamp) , 2) + ':00' 
from yourtable 
2

Bạn có thể sử dụng loại THỜI GIAN mặc định là 24 giờ;

cast(cast(timestamp as time) AS varchar(2)) + ':00' AS Hour 
+0

Tôi thậm chí không biết về loại thời gian ... Cảm ơn bạn! – TWood

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