select 12.23-ceil(12.23) from dual
成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)公司、重慶網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站定制、全網(wǎng)整合營銷推廣、微信小程序、微信公眾號開發(fā)、成都網(wǎng)站推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為混凝土攪拌機企業(yè)提供源源不斷的流量和訂單咨詢。
--結(jié)果 -0.77
select substr(12.23-floor(12.23),2,10) from dual;
--這個東西做不到通用沒什么價值
--如果
select substr(12.231111111111111-floor(12.231111111111111),2,10) from dual;
--結(jié)果不會是231111111111111,而是2311111111
select ltrim(0.55523-floor(0.55523),'0.') from dual;
--這個比較有代表性
--1
select substr(12.25,instr(12.25,'.')+1,length(12.25)) from dual;
--結(jié)果 25
--2
select A.a*power(10,length(A.a)-1) from
(select trunc(12.25333,length(12.25333))-trunc(12.25333,0) a from dual) A
--結(jié)果 25333
--方法很多的,看你想怎么個實現(xiàn)方法。最好做成函數(shù),通用一點。
oracle to_char(小數(shù)) 默認如此 oracle就是這樣的
to_char用法本身也是需要格式化的,只不過我們平時對于普通字符都是直接to_char而已,對于時間,錢幣等都是需要格式化的,對于小數(shù)不格式化就是沒有前面的零的,可以這樣格式化
select to_char(0.1,'fm9999990.9999') from dual;
select to_char(0.338,'fm9999999990.00') from dual;
結(jié)果:0.34
這里重點要看 fm9999999999.99,表示整數(shù)部分最多10位,小數(shù)部分2位,fm表示去掉轉(zhuǎn)位字符串后前面的空格,不加fm,0.34前面會有空格的.
有時候想在數(shù)據(jù)庫中存儲插入數(shù)據(jù)時的時間,比如有一條評論,我想在把評論內(nèi)容存入數(shù)據(jù)庫的時候把存儲評論時的時間也存到數(shù)據(jù)庫中。當然這個過程是自動完成的,即不需要我在業(yè)務(wù)邏輯代碼中還得初始化一個Date對象然后再把這個Date對象轉(zhuǎn)換為某種格式存到數(shù)據(jù)庫中。
Oracle提供了時間戳數(shù)據(jù)類型Timestamp來支持這個操作。當一個字段定義成Timestamp類型時,通過在insert語句中指定value為Sysdate就可以將執(zhí)行insert語句時的時間存入數(shù)據(jù)庫中。例如:
然后執(zhí)行查詢:
Select commenttime From webcomments;
結(jié)果顯示commenttime 列的值是這種樣子的:18-4月 -10 03.31.06.000000 下午
這和我們的預(yù)想不太相符。我們想查詢出來的時間應(yīng)該是這個樣子的:2010-04-18 13:10:57
這要是用to_char函數(shù),利用它我們可以把一個日期數(shù)據(jù)轉(zhuǎn)換為任何我們想要的格式。例如這樣寫select語句:
得到的結(jié)果是2010-04-18 15:31:06
要了解的一點是:如果單單是想存儲時間的話,Oracle還提供了一種日期類型Date,使用它也可以存儲插入數(shù)據(jù)時的時間,只要插入數(shù)據(jù)時也賦值為 Sysdate就可以。并且在查詢時也一樣可以使用to_char函數(shù)得到想要的格式。那問題就是:為什么我們要使用Timestamp類型呢?
date和Timestamp都是對日期和時間的表示,只是兩種類型的精確度不同,前者精確到秒,后者精確到小數(shù)秒Timestamp數(shù)據(jù)的格式化顯示和 Date數(shù)據(jù)一樣。注意,to_char函數(shù)支持Date和Timestamp,但是trunc卻不支持Timestamp數(shù)據(jù)類型。這已經(jīng)清楚表明了在當兩個時間的差別極度重要的情況下,使用Timestamp數(shù)據(jù)類型要比Date數(shù)據(jù)類型更確切。
并且:兩個Date類型相減的結(jié)果是以“天”為單位的,而兩個Timestamp類型相減的結(jié)果是直觀的顯示為“多少天+多少小時+多少分鐘+多少秒+多少小數(shù)秒”。例如:
查詢結(jié)果顯示(多少天 多少小時 多少分鐘 多少秒 多少小數(shù)秒?):000000001 01:30:10.100000
最后,Date轉(zhuǎn)換為Timestamp要使用CAST函數(shù),例如:
sql中步驟獲取當天時間的零點如下:
1、打開sqlserver數(shù)據(jù)庫管理工具,點擊“新建查詢”,打開一個書寫SQL語句的新窗口,輸入sql語句,查詢當前的數(shù)據(jù)庫日期。
2、獲取sqlserver中的最小日期,注意,這個日期的時間就是0點。
3、獲取當前日期距離最小日期,經(jīng)過了多少天。
4、?從sqlserver最小日期加上這個天數(shù),就得到了當天的0點。
給你簡單寫個,不過到時候你得定義一個job自動調(diào)度(每小時執(zhí)行),這里我就按你說的寫個存儲過程
先建立一個存儲每個小時數(shù)據(jù)的表,就叫test吧,之前的你取數(shù)據(jù)的表叫test1
PROCEDURE SP_AUTO_HOUR
IS
v_time varchar2(10);
v_time1 varchar2(10);
begin
select to_char(sysdate-1/24,'yyyymmddhh24') into v_time from dual;
select to_char(sysdate,'yyyymmddhh24') into v_time1 from dual;
insert into test select * from test1 where to_char(time,'yyyymmddhh24') between v_time and v_time1;
commit;
end;
你這個完全不用考慮0點的問題,已經(jīng)計算在內(nèi)了,到時你可以試試,也可以手動執(zhí)行一下