2013-07-26 52 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