Postgresql

postgresql 中的 ceil() 函式行為

  • January 4, 2018

在 postgresql 中使用 ceil() 時,我發現它有一些奇怪的行為,請參閱 SQL:

Select  
    *,
    ceil( (550*0.5)/100 ),
    ceil( (58*5)/100 ),
FROM
  XYZ

如果我專注於 ceil 函式的輸出,那很奇怪:

  • ceil( (550*0.5)/100 ) 返回 3 (將 2.75 轉換為 3 )
  • ceil((58*5)/100 ) 返回 2 (將 2.9 轉換為 2 )

如果第二條語句接近更大的整數 3 ,為什麼它會返回 2 ?

說明

PostgreSQL ceil 函式返回大於或等於數字的最小整數值。

根據Postgres Docs

除非另有說明,任何給定形式的函式都返回與其參數相同的數據類型。

如您所見,它可以正常工作,實際上,如果您使用整數,則返回值為一個整數,(58 * 5) / 100)返回 2,但如果您將其強制為十進制(58.0 * 5.0) / 100.0,則返回 2.9。

select 
     (550 * 0.5) / 100 as C1,
     ceil((550 * 0.5) / 100) as CEIL_C1,
     (58 * 5) / 100 as C2,
     ceil((58 * 5) / 100) as CEIL_C2,
     (58.0 * 5.0) / 100.0 as C3,
     ceil((58.0 * 5.0) / 100.0) as CEIL_C3
;
 c1 | ceil_c1 | c2 | ceil_c2 | c3 | ceil_c3
-----------------: | ------: | -: | :------ | -----------------: | ------:
2.7500000000000000 | 3 | 2 | 2 | 2.9000000000000000 | 3

dbfiddle在這裡

引用自:https://dba.stackexchange.com/questions/194585