2012-03-01 68 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