2013-04-01 55 views
0

我不知道用於此的術語或確切的單詞,但我正在尋找MySQL中的一個函數,可以將數字修整爲X和YMysql:修剪數字在X和Y之間最小/最大

例如,這樣的事情:

SELECT TRIM_NUMBER(NUMBER, MIN, MAX); 

如果我這樣做:TRIM_NUMBER(50, 1, 100)應該罰款,並返回50

但是,如果我做了類似:TRIM_NUMBER(999, 1, 100)它應該返回100,因爲它是我們設置的最大值。同樣的事情應該適用於MIN。

MySQL中是否包含這樣的函數?

+0

這個功能怎麼會是有用的 - 爲什麼會一個WHERE功能在這種情況下不工作? – Terry

+1

我需要在複雜的SELECT查詢中使用它(不在WHERE部分中),謝謝 – Reacen

+0

如何在服務器端預先處理數字,例如使用PHP? – Terry

回答

4

試試這個

SELECT GREATEST(LEAST(NUMBER, 100), 1); 
+0

這解決了我的問題!非常感謝您的先生 – Reacen

+0

+1比我的整潔:)做得很好 – Bohemian

+0

非常好!我不知道這個功能存在! +1 – Barranka

1

沒有內置任何東西,但你的代碼,它你自己,像這樣:

select if(num < 1, 1, if (num > 100, 100, num)) 
+0

fisharebest的解決方案看起來更乾淨,但非常感謝您的幫助 – Reacen

1

如果你想「overki LL」的功能,在這裏有一個建議:

create function trimNumber(x double, floorValue double, ceilValue double) returns double 
begin 
    declare ans double; 
    if x >= floorValue and x <= ceilValue then 
     set ans = x; 
    else 
     if x < floorValue then 
      set ans = floorValue; 
     else 
      set ans = ceilValue; 
     end if; 
    end if; 
    return ans; 
end 
+1

肯定fisharebest是一個更好(更清潔,更短)的答案 – Barranka

+0

非常感謝!我也同意! – Reacen

+0

爲什麼不只是在接受的答案中返回表達式?這段代碼是荒謬的。 – Bohemian

0

只需添加這一點,因爲它是表達這個的ANSI標準方式:

select (case when num < 1 then 1 
      when num > 100 then 100 
      else num 
     end) as TrimmedNum 
相關問題