Java儲存yyyy-MM-dd HH:mm:ss日期文字到 oracle date類型欄位[原]__C++

來源:互聯網
上載者:User

+ "','"+ mytechnical + "',TO_DATE('"+mybirthday+"','YYYY-MM-DD'),'"+ myemail + "','"+ mytelephone


TO_DATE('','')在SQL語句中不需要加‘’,但是為了獲得變數必須用以上格式

一、使用oracle函數:

TO_TIMESTAMP_TZ('2009-3-9 17:51:23.23 -05:00',    'YYYY-MM-D HH24:MI:SS.FF TZH:TZM')

TO_DATE(yourdate,'YYYY-MM-D HH24:MI:SS');    // 字串轉日期Date

T0_CHAR(yourdate,'YYYY-MM-D HH24:MI:SS');   // 日期Date轉字串

eg:

update t_fl_flownote set sendtime=TO_TIMESTAMP_TZ('2009-11-30 10:47:16','YYYY-MM-DD HH24:MI:SS')

二、轉別人的日誌

我們都知道date和timestamp都是對日期和時間的表示,只是兩種類型的精確度不同,前者精確到秒,後者精確到小數秒(fractional_seconds_precision),可以是 0 to 9,預設是6。

但是對date類型的運算很簡單,有很多函數可用來處理;而兩個timestamp的差則是很直觀地顯示為多少天+多少小時+多少分鐘+多少秒+多少小數秒,

SQL> create table test (T1 TIMESTAMP(6),
2 T2 TIMESTAMP(6));

表已建立。

SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-01 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff'));

已建立 1 行。

SQL>
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-02 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff'));

已建立 1 行。

SQL>
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-02 13:40:20.2','yyyy-mm-dd hh24:mi:ss.ff'));

已建立 1 行。

SQL> commit;

提交完成。

SQL>

兩個timestamp的差則是很直觀地顯示為多少天+多少小時+多少分鐘+多少秒+多少小數秒:
SQL> select t2-t1 from test;
+000000000 00:10:00.100000
+000000001 00:10:00.100000
+000000001 01:30:10.100000

SQL>

但要簡單地轉化為某一個精度卻比較麻煩,用類似date類型的處理方法是不行的。如轉化為分:
SQL> select 1440*(t2-t1) from test;
+000000010 00:02:24.000000000
+000001450 00:02:24.000000000
+000001530 04:02:24.000000000

SQL>

發現結果根本不是原先想要的,而是在原先的“多少天+多少小時+多少分鐘+多少秒+多少小數秒”的每一項都乘以1440再進行進位處理。

最容易理解的就是用substr將兩個timestamp的差進行分割轉化處理:

SQL>  SELECT substr((t2-t1),instr((t2-t1),' ')+7,2)         seconds,
2      substr((t2-t1),instr((t2-t1),' ')+4,2)         minutes,
3     substr((t2-t1),instr((t2-t1),' ')+1,2)         hours,
4     trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))  days,
5     trunc(to_number(substr((t2-t1),1,instr(t2-t1,' ')))/7) weeks
6 FROM test;

SECO MINU HOUR DAYS WEEKS
---- ---- ---- ---------- ----------
00 10 00 0 0
00 10 00 1 0
10 30 01 1 0

或者利用自訂函數來實現將天數轉換成“天時分秒”格式:

CREATE OR REPLACE FUNCTION F_DAYS2STR(P_DAYS IN NUMBER DEFAULT 0)
RETURN VARCHAR2 IS
--Ver:1.0
--Created by xsb on 2005-05-26
--For: 將天數轉換成天時分秒格式
DAYSNUMBER := NVL(P_DAYS, 0);
VDNUMBER; --天
VHNUMBER; --小時
VMNUMBER; --分
VSNUMBER; --秒
RESULT VARCHAR2(100); --傳回值
BEGIN
VD := TRUNC(DAYS);
VH := TRUNC((DAYS - VD) * 24);
VM := TRUNC((DAYS - VD - VH / 24) * 24 *60);
VS := TRUNC((DAYS - VD - VH / 24 - VM / 24 /60) * 24 * 60 *60);
SELECT DECODE(VD, 0, '', VD ||'天') || DECODE(VH, 0,'', VH || '小時') ||DECODE(VM,0, '', VM || '分') || DECODE(VS,0, '', VS || '秒')INTO RESULT FROM DUAL;
RETURN(RESULT);
END;

SQL>

如果最後結果的精度要求不高時(在分或分以上時),就可以先將timestamp轉化為date再結算,這樣就簡單多了:

SQL> select (to_date(to_char(t2,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'
)-to_date(to_char(t1,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24*60
2 from test;

10

1450

1530.16667

date轉換為timestamp




 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.