這種問題有可能是你列的格式引起的,比如ID列類型number(3,2),小數位最多2位,如果超過2位就會四舍五入;
十多年的宜陽網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站建設的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整宜陽建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯建站從事“宜陽網站設計”,“宜陽網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
示例如下:
create table a1(id number(3,2));
insert into a1 values(1.23);
insert into a1 values(1.526);
insert into a1 values(1.784);
insert into a1 values(1.23787887);
select * from a1;
結果:
ID
1.23
1.53
1.78
1.24
如果不想四舍五入,可以更改number(3,2)
如:
truncate table a1;
alter table a1 modify (id number(10,9));
insert into a1 values(1.23787887);
select * from a1;
ID
1.237878870
首先你的例子數據錯了,不是21號,應該是24號。這樣就沒問題了。
看你列出的數據,應該是格式由小到大,逐步四舍五入的一個過程。
這個算法如下:
round(帶小時分秒日期, 格式)
格式是 秒SS,精確到秒。
分MI,到分,秒數30是分界線,相當于四舍五入的5,如果秒超過30,向前進1
時HH,如果分超過30,向前進1
日DD, 如果小時超過12,向前進1
月MM,16號是臨界,相當于四舍五入的5,如果超過16號,向前進1
年YY,超過7月,向前進1
對應的語句分別是
select to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'mi') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'hh') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'dd') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'mm') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'yy') from dual;
oracle中的round函數是用來將數值四舍五入的。
語法:
round(number,digits)
其中number是要進行四舍五入的數值,digits是保留的小數位數。
舉例:
要將三個人的身高四舍五入保留1位小數,可用如下語句:
select id,姓名,round(身高,1) from person;運行結果!
Oracle Round 函數的意思是四舍五入的方法,即傳回一個數值,該數值是按照指定的小數位元數進行四舍五入運算的結果。
Oracle Round 函數使用示例如下:
SELECT ROUND( number, [ decimal_places ] ) FROM DUAL
1、參數?number 是指需要處理的數值,是必須填寫的值。
2、參數 decimal_places 是指在進行四舍五入運算時 , 小數的應取的位數,該參數可以不填,不填的時候,系統(tǒng)默認小數位數取0。
3、函數應用舉例:
①“select round(988.211, 0) from dual;”得到結果為:988
②“select round(988.211, 1) from dual;”得到結果為:988.2
③“select round(988.211, 2) from dual;” 得到結果為:988.21
④“select round(988.211, 3) from dual;” 得到結果為:988.211
⑤“select round(-988.211, 2) from dual;”得到結果為:-988.21
擴展資料:
四舍五入是一種精確度的計數保留法,與其他方法本質相同。
但特殊之處在于采用四舍五入,能使被保留部分的與實際值差值不超過最后一位數量級的二分之一,假如0~9等概率出現的話,對大量的被保留數據,這種保留法的誤差總和是最小的。
這也是我們使用這種方法為基本保留法的原因。
參考資料:百度百科-Round函數?百度百科-四舍五入
接收字符返回字符或數值時可以使用dual偽表
1、把小寫字符轉換成大寫
select supper(“smi”) form dual
2、把大寫轉換成小寫
lower(“SMI”)
3、首字母大寫
initcap(“smi”)
4、字符串的連接可以使用concat,也可以使用? ? 建議使用
concat(“hello”“world”) 結果為helloworld
5、字符串的截取,使用substr,第一個參數為字符串,第二個參數是索引,第三個參數結束索引(開始索引使用0和1效果一樣)
substr(hello,0,3) 結果為hel
6、獲取字符串長度
length(“hello”)
7、字符串替換,第二個參數為被替換的字符串,第三個是替換的字符串
replace(“hello”,“l(fā)”,“x”) 結果為hexxo
1、四舍五入函數ROUND()
默認取整,可以指定保留位數
round(12.523)? 結果為13
round(12.537,2) 結果為12.54
2、取整TRUNC
默認全部去掉小數,可以指定位數
trunc(12.789) 結果為12
3、取余數MOD
mod(10,3) 結果為1
oracle中提供了很多和日期相關的函數,包括日期的加減
日期 - 數字 =日期
日期 - 日期 = 數字(天)
1、如:查詢員工進入公司的走數
(sysdate - 入職日期)/7
注:當前日期查詢select sysdate form dual
2、查詢所有員工進入公司的月數
獲取兩個時間段的月數使用months_between(sysdate,入職日期)
3、獲取幾個月后的日期:add_months()
如:獲取員工三個月后的日期
add_months(sysdate,3)
4、如求出下星期一是什么時候
指定給出下次某日期數next_date()
next_date(sysdate,“星期一”)
5、求日期的最后一天last_day()
求出本月的最后一天
last_day(sysdate)
1、to_char字符串轉換函數
如:將所有員工的入職日期的年、月分開
注:在劃分時需要通配符
年:yyyy? 月:mm? 日:dd
時:HH 分:mi? 秒:ss
定義時間格式
to_char(sysdate,“yyyy-mm-dd HH24:mi:ss”)
在10以下的月數前面會默認加上前導零,去除加上fm
to_char(sysdate,“fmyyyy-mm-dd HH24:mi:ss”)
to_char還可以給數字做格式化
如將員工的工資按三位“,”分隔
to_char(工資,“99,999”) 9代表數字
如果想在錢上加上國家符號
美元使用
中文使用l
to_char(工資,“99,999”)
to_char(工資,“l(fā)99,999”)
2、to_number數值轉換函數,將字符串轉換成數值
to_number(“10”) +to_number(“10”)
3、to_date日期轉換函數,將字符串數據轉換成日期類型
to_date(“1997-05-12”,“YYYY-mm-dd”)? 1997/05/12
1、空值處理 nvl
如果在查詢的時候存在空值的情況可以使用
nvl(comm,0) 當comm的列值為空時,用0代替
2、decode函數
該函數類似于if ...else if ...else
語法:decode(列名/值,search1,result1,search2,result2,default)
decode(中國,中國,我是中國,美國,我是美國,其他)
如果為中國返回我是中國,為美國返回我是美國,為其他字符則返回其他。
3、case when 與decode差不多
語法 case when city=中國 then 我是中國
? ? ? ? ? when city=美國 then 我是美國
? ? ? ? ? ? else 其他
to_number去掉,沒啥用,日期減法得出的就是數字,現在的問題是不足一分鐘按照一分鐘計算(進位),還是四舍五入,還是舍棄,
不足一分鐘不算,用
trunc函數,如果四舍五入用樓主的
函數
,如果想全部進位呢,用ceil函數,樓主可以試試