在Teradata作數據舍入時,發現一些問題,以下例:
select cast('1234.505' as decimal(18,2))
--1234.50
select cast('1234.515' as decimal(18,2))
--1234.52數據庫
到底時怎麼形成大的呢?.net
[@more@]查資料得知:Teradata中四捨五入的規則由DBSCONTROL下的參數 RoundHalfwayMagUp 決定,默認狀況下RoundHalfwayMagUp = FALSE,意爲按照Teradata的規則進行進位。當RoundHalfwayMagUp設爲TRUE時,和正常的進位沒有區別。Teradata的進位規則考慮的是:5是個中間值,進位或不進位都欠妥。所以他採起一種折中處理方法:
一、當5後面有1位不爲0時,則進位;
二、當5後面位都爲0或者沒有其餘位時根據5前面一位的奇偶,奇進偶不進,下面是一些例子:
select cast('1234.505' as decimal(18,2))
--1234.50
select cast('1234.515' as decimal(18,2))
--1234.52
select cast('1234.5051' as decimal(18,2))
--1234.51
select cast('1234.5052' as decimal(18,2))
--1234.51ci
select cast('1234.505001' as decimal(18,2))
--1234.51get
select cast('1234.50500' as decimal(18,2))
--1234.50ast
select cast('1234.51500' as decimal(18,2))
--1234.52class
select cast('1234.52500' as decimal(18,2))
--1234.52select
設置RoundHalfwayMagUp = true,(設置成功須要重啓數據庫才能生效)則按標準的四捨五入進行取捨。方法