1. 程式人生 > >Oracle 字串轉換TIMESTAMP型別或Date型別

Oracle 字串轉換TIMESTAMP型別或Date型別

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')

to_date('2012-11-13', 'yyyy-mm-dd')
TO_TIMESTAMP_TZ('2013-12-09 11.10.10.982000','YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')

二、轉別人的日誌

我們都知道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:

SELECT CAST(sysdate as timestamp) from dual;

相關推薦

Oracle 字串轉換TIMESTAMP型別Date型別

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(

Java中,如何將日期的字串轉換為對應的Date型別

所有時間日期都可以被SimpleDateFormat格式化format() 日期和時間格式由 日期和時間模式字串 指定。在 日期和時間模式字串 中,未加引號的字母 'A' 到 'Z' 和 'a' 到 'z' 被解釋為模式字母,用來表示日期或時間字串元素。文字可以使用單引號

BeanUtils 實現字串轉換為java.util.Date型別

 oracle資料庫中的Date型別是java.sql.date,所有在java中必須要是bean中的Date型別也為java.sql.Date. 我在用BeanUtils 轉換 用request.getParameterMap() 獲取的map集合時遇到了轉換異常, j

Spring Boot @ResponseBody 轉換 JSON資料時Date 型別處理方法

引用處: https://blog.csdn.net/molashaonian/article/details/53025118 https://blog.csdn.net/henianyou/article/details/81945409   解析JSON的方式:

轉換一定格式日期Date型別的工具類

package com.hsx.date; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { public static DateUtil dateUtil; pri

C# string轉換成DateTime?(字串轉換成可空日期型別)

最近專案中遇到以前一直困擾的問題,就是如何將string轉換成DateTime?這種可空日期型別。以前總是通過編寫一堆邏輯程式碼來進行轉換,但是寫這些程式碼感覺非常繁瑣。後在網上瀏覽相關資料,使用NullableConverter類就可以輕鬆的進行轉換。 以下是測試

String型別Date型別之間的轉換

在實際應用中,很多時候會用到String和Date型別之間的轉換,比如: 在javaEE專案中,會接受到日期格式的String,我們如果要將其轉換為Date格式,就會用到SimpleDateFormat類。 1.將String轉換為Date類 import java.tex

JSON字串轉換為java的list型別的方式

List<Map> meterList= JSONArray.parseArray(paraMap.get("metersList").toString(),Map.class); 記錄一下 其中metersList是一個json格式的字串

怎麼把字串轉換成小寫大寫等等

  #使用lower方法把字串轉換為小寫 a='Ayushi'.lower() print(a)#ayushi #使用upper方法把字串轉換為大寫 b='Ayushi'.upper() print(b)#AYUSHI # 使用isupper()和islower()方法檢

Java, String型別Date型別的方法

前端獲取的資料是:yyyy-MM-dd(如:”2017-10-19”),後端實體類的資料型別是java.util.Date,其中的資料轉換問題 String time = "2017-10-19"; SimpleDateFormat sdf = new Simple

MyBati__mapper 中取值(#{} ${}) 以及 parameterType為(基本型別 複雜型別)

參考資料: MyBatis學習筆記(三)——parameterType為基本型別時的使用方法 MyBatis的傳入引數parameterType型別   1. MyBatis的傳入引數parameterType型別分兩種    1.1  基本資料型別:int,

springmvc使用實體類接收表單提交資料中含有String型別對應Date型別的不匹配報錯400時如何處理

springmvc使用實體類接收表單提交資料中含有String型別對應Date型別的不匹配情況,頁面提交表單報錯400,時如何處理? 參看部落格:http://blog.csdn.net/u014079773/article/details/51865178  我

String型別轉為date型別

今天寫程式 突然出現 轉換日期錯誤 例如 20110202 ——> 2011/02/02 public static void main(String[] args) { SimpleDateFormat sdf_1 = new SimpleDat

javascript中string型別轉為date型別,然後比較

<SCRIPT LANGUAGE="JavaScript">//execScript('n = DateDiff("d","2003-01-01","2003-01-02")');//document.write(n);var s="2003-01-01";var

mybatis的parameterType 為基本型別包裝型別時,如何使用

當mapper中的parametType為基本型別或包裝型別(如int(java.lang.Integer),string等)時,是怎樣使用的 最簡單的使用方法: <select id="list" parameterType="string"

Linq學習筆記(一)查詢 xxx型別的常量值。此上下文僅支援基元型別列舉型別

設斷點發現ToList()的時候出現標題中的問題 實體GameRole與實體Skill 存在一對多的關係,即一個GameRole 可以有多個Skill 其中query_a直接從實體中查詢的,導致tolist()的時候受限制,只能轉成list<GameRole>

c語言 字串轉換為intfloat

       在c語言程式設計中,經常會遇到將字串或者字元陣列內的資料轉換為int型資料或者float型資料,網上找了好多方法,結果都不可行,可能是C++的函式吧。在經過多方詢問後,發現可以用atoi和atof函式來進行轉換,具體如下:(它們都存在於<stdlib.h

Linq查詢出現"此上下文僅支援基元型別列舉型別。"解決方法

今天用Linq查詢的時候,出現“此上下文僅支援基元型別或列舉型別。” var query = from user in userService.Entities join role in roles on user.ID equals r

oracle資料庫中的timestamp型別轉換date 型別

0 1引入包 2import oracle.sql.TIMESTAMP;(注意不是import java.sql.Timestamp;) 3//呆段程式碼的意思是,取出上表中某條記錄的Add_time欄位,然後轉換為date型別,然後再由date型別轉換成字串。 Simp

oracletimestampDate型別轉換

直接上方法。 1、timestamp –>Date cast(systimestamp as date)也可以將timestamp轉換成Date。 select cast(systimestamp as Date) from Dual; syst