2013-07-26 53 views
-5

,我需要像圆小数:轮SQL运作,但这种情况下,如何在MYSQL

1.00 ->1.0 
1.987->1.98 
1.93-> 1.93 
1.07->1.07 

如何做到这一点在MySQL?

+5

什么是具有'1.00'到一个小数点的规则,但其他所有到2? –

+0

将2.00的值返回为“2.00”还是“2.0”?是否有规则,一个有条件的测试,可以用来做出决定。这是一个简单的例子(尽管你声称它不是)。 '1.00'返回为'1.0',因为这是返回的第一行,因为它等于1,或者因为它小于1.04?给我们规则。 – spencer7593

回答

0

就像这样:

SELECT if(NUMBER mod 1=0,ROUND(NUMBER,1),ROUND(NUMBER,2));

如。

SELECT IF(1.00 MOD 1=0,ROUND(1.00,1),ROUND(1.00,2)); => 1.0

more info

+0

老板,我需要如果1.00然后1.0,如果1.07然后1.07意味着它不是简单的情况。尝试得到我的观点和答案请 –

+0

现在尝试 - 它的泥土,但工程! – jaczes

2

这里去一些文档

http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_round

快速回答:

mysql> SELECT ROUND(1.987, 2); = 1.99 

以上你在找什么对于

truncate(1.987, 2) = 1.98 

Mysql decimal: floor instead of round

+0

老板,我需要如果1.00然后1.0,如果1.07然后1.07意味着它不是简单的情况。请尝试获得我的观点和答案 –

+0

也许案例说明会有所帮助?我认为你需要根据每一行进行评估。 – Elias

+4

@ShrikantGupta你为什么不回答[戈登的问题](http://stackoverflow.com/questions/17883327/round-in-sql-works-but-for-this-case-what-to-do-in- mysql#comment26115230_17883327)? – HamZa

1

这仅有差别如果正在输出的数目(数值,1.0 = 1.00)。所以:

(case when format(num, 2) = '1.00' then '1.0' else format(num-0.005, 2) end) 

-0.005是要克服的事实,format()回合,而不是截断。

+1

只是问 - 在一种情况下'case'比'if'更快吗? – jaczes

+3

@jaczes。 。 。可能不会。我想他们被编译成类似的结构。然而,当试图使查询运行得更快时,这种微观优化通常会浪费精力和大脑带宽。 –

+0

+1。或'FORMAT(TRUNCATE(num,2),2)'。我怀疑OP想'2.00'返回为'2.0',但这没有指定。该解决方案符合规范(至少在规范修改之前)。 – spencer7593