2010-02-23 37 views
10

Giả sử tôi có 90 giây. Nếu tôi muốn để hiển thị các kết quả về phút và thứ hai, tôi làm điều đó bằng cách sử dụngCách hiệu quả để chuyển đổi từ giây sang phút và giây trong máy chủ sql 2005

select Time= '0' + CAST(90/60 as varchar(2)) + ':' + CAST(90%60 as varchar(2)) 

Đầu ra là

Time
01:30

Tôi đã nối 0 (không) vì nếu bạn thực hiện select getdate(), đầu ra sẽ là

yyyy-mm-dd hh: mm: ss: ms

Cách tiêu chuẩn và thực hành được khuyến nghị để thực hiện chuyển đổi như vậy là gì?

Cảm ơn

Trả lời

23

Với giờ:

SELECT CONVERT(CHAR(8),DATEADD(second,90,0),108) 
00:01:30 

giờ Lờ đi:

SELECT RIGHT(CONVERT(CHAR(8),DATEADD(second,90,0),108),5) 
01:30 
+0

Đó là tuyệt vời .. nhưng nó cũng cho thấy lĩnh vực giờ. Tôi chỉ cần mm: ss. Tôi có nên sử dụng quyền đó hay không CHỌN phải (CONVERT (CHAR (8), DATEADD (thứ hai, 90,0), 108), 5). Hoặc bất kỳ cách tiêu chuẩn nào là có –

+0

Có, tôi đã chỉnh sửa khi bạn đăng nhận xét của mình. –

+0

Điều đó không hoạt động với số giây bằng hoặc lớn hơn trong một ngày: SELECT CONVERT (CHAR (8), DATEADD (giây, 86400,0), 108) – gotqn

0

Một trong những điều đầu tiên tôi làm trên một cơ sở dữ liệu SQL tươi được thêm một chức năng Timespan tương tự với trang này (mặc dù tôi có xu hướng bao gồm cả ngày và mili giây):

CREATE FUNCTION dbo.TimeSpan 
(
    @Hours int, 
    @Minutes int, 
    @Seconds int 
) 
RETURNS datetime 
AS BEGIN 
    RETURN DATEADD(SS, @Hours * 3600 + @Minutes * 60 + @Seconds, 0) 
END 

Sau đó, bạn có thể định dạng này tuy nhiên bạn muốn:

SELECT SUBSTRING(CONVERT(char(8), dbo.TimeSpan(0, 0, 90), 108), 4, 5) 

Nó có thể trông phức tạp hơn lúc đầu, nhưng khả năng tái sử dụng các chức năng TimeSpan đến trong rất tiện dụng theo thời gian. Đối với tôi, có vẻ như một cuộc tấn công luôn phải viết các cuộc gọi DATEADD chống lại 0 hoặc '1753-01-01'.

+0

Giải pháp này chỉ hoạt động với số lượng nhỏ. Ví dụ: nếu bạn có 82816 giây so với SELECT SUBSTRING (CONVERT (char (8), dbo.TimeSpan (0, 0, 82816), 108), 4, 5) chỉ trả về 16 giây! – Dave

3

Hãy thử điều này:

select convert(varchar(10), dateadd(second, 15794, 0), 108) 
Các vấn đề liên quan