2016-06-14 18 views
-1

我想將第二個格式轉換爲hh:mm:ss格式。第二個HH:MM:SS轉換在SQL Server中100小時後不正確

後360000秒(100個小時)的hh:mm:ss格式被重置爲00:00:00

這是我使用的代碼:

create table #test (seconds bigint) 

insert into #test values ('359999') 

SELECT 
    seconds, 
    RIGHT('0' + CAST(seconds/3600 AS VARCHAR), 2) + ':' + 
    RIGHT('0' + CAST((seconds/60) % 60 AS VARCHAR), 2) + ':' + 
    RIGHT('0' + CAST(seconds % 60 AS VARCHAR), 2) AS [HH:MM:SS] 
FROM 
    #test 

結果:

Total_HandleTime_Sale  HH:MM:SS 
360000     00:00:00 

但對於我的應用程序,我需要輸出爲:

Total_HandleTime_Sale  HH:MM:SS 
360000     100:00:00 
+1

替換'RIGHT( '0' + CAST(秒/ 3600 AS VARCHAR),2)'與'RIGHT( '0' + CAST(秒/ 3600 AS VARCHAR),(CASE LEN(CAST(秒/ 3600 AS VARCHAR))> 2 then LEN(CAST(seconds/3600 AS VARCHAR))ELSE 2 END)' – mxix

+0

insert into #test values('360000') –

回答

2

RIGHT('0' + CAST(seconds/3600 AS VARCHAR),2)100值修剪1 - 所以你需要測試是否值越小則100或更大然後99

create table #test 
(seconds bigint) 

insert into #test values (360000), (359999) 

SELECT seconds, 
     CASE WHEN seconds/3600 < 100 THEN 
      RIGHT('0' + CAST(seconds/3600 AS VARCHAR),2) 
     ELSE 
      RIGHT('000' + CAST(seconds/3600 AS VARCHAR),3) 
     END + ':' + 
     RIGHT('0' + CAST((seconds/60) % 60 AS VARCHAR),2) + ':' + 
     RIGHT('0' + CAST(seconds % 60 AS VARCHAR),2) 
as [HH:MM:SS] FROM #test 

drop table #test 

結果:

seconds    HH:MM:SS 
-------------------- --------- 
360000    100:00:00 
359999    99:59:59 
1

首先,不要」在SQL Server中使用varchar而沒有長度說明符。這很危險,因爲默認長度因上下文而異。

在你的表情,你必須:

RIGHT('0' + CAST(seconds/3600 AS VARCHAR), 2) 

那麼,這正在正好兩個字符。所以「'100'」 - >「'00'」。

這裏是固定表達的一種方式:

SELECT seconds, 
     (RIGHT('0' + CAST(seconds/3600 AS VARCHAR(255)), 3) + ':' + 
     RIGHT('0' + CAST((seconds/60) % 60 AS VARCHAR(255)), 2) + ':' + 
     RIGHT('0' + CAST(seconds % 60 AS VARCHAR(255)), 2) 
     ) as [HH:MM:SS] 
FROM #test; 

然而,這會給結果HHHH:MM:SS。而且,你在1000小時也會遇到同樣的問題。所以,這可能是你想要的:

SELECT seconds, 
     ((CASE WHEN seconds < 36000 
       THEN RIGHT('0' + CAST(seconds/3600 AS VARCHAR(255)), 2) 
       ELSE CAST(seconds/3600 AS VARCHAR(255)) 
      END) + ':' + 
     RIGHT('0' + CAST((seconds/60) % 60 AS VARCHAR(255)), 2) + ':' + 
     RIGHT('0' + CAST(seconds % 60 AS VARCHAR(255)), 2) 
     ) as [HH:MM:SS] 
FROM #test; 

這隻會在需要的時候增加額外的數字。

0
declare @seco int 
set @seco=370000 
select CONVERT(VARCHAR,@seco/60/60)+':'+RIGHT('00'+convert(varchar,@seco/60%60),2)+':'+RIGHT('00'+convert(varchar,@seco%60),2) 
相關問題