2012-03-01 22 views
1

私はテーブルを持っており、データタイプDecimalからHH:MMDurationカラムを更新したいと思います。10進数から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? –

答えて

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私はあなたが完全にポイントを逃したと思ってほとんどdownvoted。 –

+0

これは私の問題を完全に解決します。 – Dharmendra

+0

@Dharmendra Plsがこの問題を解決した場合にansを受け入れる –

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

これは私の問題を解決しますが、10進形式で正確な結果を返すことはできません。結果はRound Offとなります。論理については大変お世話になります... – Dharmendra

+0

ありがとう@Mikael、これも私の問題を解決した –

関連する問題