2012-03-01 42 views
1

我有一個表,我想更新Duration列,其中的數據類型DecimalHH:MM格式。十進制到HH:MM轉換

ECode  Duration 
101   101.75 
101   69.56 
102   54.60 
103   54.97 

輸出應該是這樣的:

ECode  Duration 
101   102.15 
101   69.56 
102   55 
103   55.37 

我們小數點後及後若十進制60或60多個將在那裏我們小數點之前加1之後的剩餘計算時間從60減去我們正在顯示。

例101.75,這裏小數點後75有所以,首先我們要檢查它是否大於或等於60。如果是,則減去60小數點前加1,並把剩下的15小數點後。所以結果應該是102.15。

請分享查詢,如果能夠解決這個問題。

+1

你到目前爲止嘗試過什麼?你卡在哪裏?另外:哪個**版本的SQL Server? 2000年,2005年,2008年,2008年R2? – 2012-03-01 09:51:59

回答

0

我猜你會做這樣的事情(某種「僞」代碼):

String reorder(String x) { 
    String parts[] = x.split(.); 
    if(parts.length < 2) x; 
    // eval as integers: 
    if(parts[1] < 60) return x; 
    if(parts[1] > 60) return (parts[0]+(parts[1]/60))+"."+(parts[1]%60); 
    return parts[0]+1; 
} 

但究竟如何做到這取決於你是否」重新做一個腳本,一些應用程序和你正在使用的語言...

3

這應做到:

update thistable 
set duration = duration + 0.4 
where duration - floor(duration) >= 0.6 
+0

+1我覺得你完全錯過了這個觀點,我幾乎低估了。 – 2012-03-01 10:09:10

+0

這解決了我的問題。 – Dharmendra 2012-03-01 10:36:13

+0

@Dharmendra請接受ANS如果這個解決您的問題 – 2012-05-25 06:14:37

2
update YourTable set 
    Duration = floor(Duration) + 
       cast(((Duration - floor(Duration))*100) as int)/60 + 
       cast((cast((Duration - floor(Duration)) * 100 as int) % 60) as float)/100 
+0

這解決了我的問題,但沒有給予準確的結果以十進制格式結果即將作爲回合Off.Thanks很多的邏輯,它可以幫助我... – Dharmendra 2012-03-01 10:38:42

+0

非常感謝@Mikael,這也解決了我的問題 – 2013-05-22 09:18:49