這個問題在項目中是一個很重要的細(xì)節(jié),具體有兩種處理方式,主要取決于這個表是否需要進行數(shù)據(jù)交換,以及這個時間字段如何使用,具體舉兩個例子吧:
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)弋江免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
一、使用varchar2型
1、如果這張表對時間的精度要求不高,比如只是到日。
2、該表需要經(jīng)常與其他表進行數(shù)據(jù)交互,比較,查詢,并且其他表的時間精度不高于日(比如日、月、季度)
3、存儲大量數(shù)據(jù)用于統(tǒng)計分析,如本期、同期,累計值等。
存儲的時候需要格式化,例如:to_char(sysdate,'yyyy-mm-dd');
二、使用date型。
1、對時間精度要求較高,比如到秒;
2、需要與其他表做數(shù)據(jù)交互,更偏重于”準(zhǔn)實時“交互,比如每15秒同步一次數(shù)據(jù);
3、不用于統(tǒng)計分析(這點很重要,需要統(tǒng)計分析的話,強烈不建議使用date型);
4、該表數(shù)據(jù)不做物理刪除(刪除時只更新標(biāo)志位和刪除時間);
以上我這幾年的實際項目經(jīng)驗,希望可以幫到你。
update b to_date("20190101 09:09:02");
日期格式需要轉(zhuǎn)換,百度一下很多寫法。
更改格式對不對,需要先用查看語句試一下,有時候會報錯。
select to_date("20190101 09:09:02") from dual;
很簡單的。
我感覺你應(yīng)該是不知道怎么寫每月和每年吧。其實很簡單,把你下次時間的字符串拿出來看下就行。下面是代碼。
DECLARE
I4 INTEGER;I5 INTEGER;
BEGIN
--每月5號中午12點
DBMS_JOB.SUBMIT(I4,'YOUR PROC;',SYSDATE,'TRUNC(SYSDATE, ''MM'') + 4 + 12 / 24');
--每年1月10號中午12點
DBMS_JOB.SUBMIT(I5,'YOUR PROC;',SYSDATE,'TRUNC(SYSDATE, 'Y') + 9 + 12 / 24');
COMMIT;
END;
每天晚上6點到第二天早上8點的數(shù)據(jù)?
按照24小時制,那可以拆分為:18~24;1~8
試試這個:
select * from tbl c
where
( to_char(c.date, 'hh24:mi:ss') = '18:00:00' and to_char(c.date, 'hh24:mi:ss') = '24:00:00')
or
( to_char(c.date, 'hh24:mi:ss') = '01:00:00' and to_char(c.date, 'hh24:mi:ss') = '08:00:00')
oracle job 時間每五分鐘執(zhí)行:
begin
sys.dbms_job.submit(job = :job,
what = '一個存儲過程;',
Interval =TRUNC(sysdate,'mi') + 5/ (24*60));
commit;
end;
其中:如果改成TRUNC(sysdate,'mi')+ 10/ (24*60) 就是每10分鐘執(zhí)行次。每秒鐘執(zhí)行次:Interval = sysdate+ 1/(24 * 60 * 60)。如果改成sysdate + 10/(24 *60 * 60)就是10秒鐘執(zhí)行次。
使用dbms_job.submit方法過程,這個過程有五個參數(shù):job、what、next_date、interval與no_parse:
1、job參數(shù)是輸出參數(shù),由submit()過程返回的binary_ineger,這個值用來唯一標(biāo)識一個工作。一般定義一個變量接收,可以去user_jobs視圖查詢job值。
2、what參數(shù)是將被執(zhí)行的PL/SQL代碼塊,存儲過程名稱等。
3、next_date參數(shù)指識何時將運行這個工作。
4、interval參數(shù)何時這個工作將被重執(zhí)行。
5、no_parse參數(shù)指示此工作在提交時或執(zhí)行時是否應(yīng)進行語法分析——true,默認(rèn)值false。指示此PL/SQL代碼在它第一次執(zhí)行時應(yīng)進行語法分析,而FALSE指示本PL/SQL代碼應(yīng)立即進行語法分析。
擴展資料:
1、每天定時執(zhí)行
例如:每天的凌晨1點執(zhí)行
Interval =TRUNC(sysdate) + 1 +1/ (24)
2、每周定時執(zhí)行
例如:每周一凌晨1點執(zhí)行:
Interval =TRUNC(next_day(sysdate,'星期一'))+1/24
3、每月定時執(zhí)行
例如:每月1日凌晨1點執(zhí)行:
Interval=TRUNC(LAST_DAY(SYSDATE))+1+1/24
4、每季度定時執(zhí)行
例如每季度的第一天凌晨1點執(zhí)行:
Interval =TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
參考資料來源:百度百科-Oracle系統(tǒng)
參考資料來源:百度百科-Oracle PL/SQL從入門到精通
1、創(chuàng)建測試表,
create table test_date(id number, times date);
2、插入測試數(shù)據(jù)
insert into test_date select level, sysdate-level/24/60 t from dual connect by level = 100;
commit;
3、查詢表中數(shù)據(jù),select t.* from test_date t;
4、編寫sql,獲取加5分鐘大于等于當(dāng)前系統(tǒng)時間的記錄; select t.* from test_date t where times+5/24/60=sysdate;