2014-06-30 39 views
1

我有分钟 140.哪个小时和分钟成为2:20。如何将分钟数转换为在小数点后的sql?

在这种情况下,我很想得到2.33。

我已经试过:

select cast(140/60 as varchar(8)) + '.' + cast((140 % 60) as varchar(8)) 

输出:2.20

select 140/60 

输出:2

select cast(140/60 as decimal(5,2)) 

输出:2.00

我错过了什么?

我如何转换140分钟来表示小时小时?

+0

则应将140和60漂浮过,SELECT CAST(140为float)/铸造(60浮法) – NeedAnswers

+0

'选择的情况下(140/60为十进制(5,2))''''2.33'对我来说很好...... –

+0

@hoangnnm谢谢,那就是诀窍! select cast(cast(140作为浮动)/ cast(60浮动)如十进制(5,2)) – doge

回答

1

试试这个

Select convert(decimal(5,2),convert(float,140)/60) 

Select cast(140.00/60 as decimal(5,2)) 
+0

完美的作品! – doge

+0

你为什么要转换为“浮动”,然后转换为“小数”?当然,两者都应该是“十进制”? – MatBailie

+0

看到我的主要评论.. – Azar

2

很抱歉的快速评论,我会尽力解释得更清楚一点关于这一点。

默认情况下,将SQL“思考”,无论您的股息&除数INT数据类型,这就是为什么它返回2

如果用十进制指定的电话号码,就像这样:

select (140.00/60.00) 

现在数据类型不再是int了,结果是:2.3333333

因此,您需要将其中一种数据类型转换为float,decimal,numeric(n,n)才能得到准确的结果:

select cast(140 as decimal(5, 2))/cast(60 as decimal(5, 2)) 

但你仍然可以只只转换股息或除数,像这样:

select 140/cast(60 as decimal(5, 2)) 

select cast(140 as decimal(5, 2))/60 

他们都给出了相同的结果,becasue结果类型的数据类型具有更高优先级的参数,在这种情况下,小数的优先级高于int

您可以在这里阅读更多内容:

相关问题