oracle 日期型別

2021-10-21 02:09:09 字數 4225 閱讀 7061

oracle欄位是時間戳型別

to_timestamp(

'2012-07-28 00:00:0.000000000'

,'yyyy-mm-dd hh24:mi:ss.ff9'

)

時間戳格式化

select to_char(時間戳的那一列 /

(1000*60

*60*24

)+ to_date(

'1970-01-01 08:00:00'

,'yyyy-mm-dd hh:mi:ss'),

'yyyy-mm-dd hh:mi:ss'

)as cdate

from 表名 ;

oracle group by 顯示其他字段

select

oid,

back1,back2,

row_number(

)over

(partition

by back1 order

by oid desc

) rw

from test1

時間比較(timestamp)

-- 1. 都變為字串比較   

where to_char(birthdate,

'yyyy-mm-dd'

)>=

'2000-10-5'

-- 2. 都變為日期格式比較

where birthdate >= to_date(

'2000-10-5'

,'yyyy-mm-dd'

)-- 3. 第三種

where to_date(record_date,

'yyyy-mm'

)= to_date(

'2000-10'

,'yyyy-mm'

)-- 4. 錯誤方式

where birthdate >=

'2000-10-5'

報錯: 輸入時間太長

結論:時間太長,如果是乙個比較不會出錯,多個比較需要給輸入時間字串加上單引號

-- 第一種

<

if test=

" beginyear != null and beginyear !='' "

>

and to_date(substr(record_date,1,

7),'yyyy-mm'

)>

= to_date(

'$',

'yyyy-mm'

)>

<

if test=

" endyear!= null and endyear !='' "

>

and to_date(substr(record_date,1,

7),'yyyy-mm'

)<

= to_date(

'$',

'yyyy-mm'

)>

-- 第二種

<

if test=

" beginyear != null and beginyear !='' "

>

and to_date(record_date,

'yyyy-mm'

)>

= to_date(

'$',

'yyyy-mm'

)>

<

if test=

" endyear!= null and endyear !='' "

>

and to_date(record_date,

'yyyy-mm'

)<

= to_date(

'$',

'yyyy-mm'

)>

-- 第三種

<

if test=

" beginyear != null and beginyear !='' "

>

and record_date >

= to_date(

'$',

'yyyy-mm'

)>

<

if test=

" endyear!= null and endyear !='' "

>

and record_date <

= to_date(

'$',

'yyyy-mm'

)>

時間比較

-- 正確語句

select to_date(

'2012-05-06 12:05:03'

,'yyyy-mm-dd hh24:mi:ss'

)from dual

select to_date(

'2012-05-06'

,'yyyy-mm-dd hh24:mi:ss'

)from dual

select to_date(

'2012-05-06'

,'yyyy-mm-dd'

)from dual

-- 報錯語句

select to_date(

'2012-05-06 12:05:03'

,'yyyy-mm-dd'

)from dual

報錯

型別實際值

解決

and to_date(to_char(

year

,'yyyy-mm'),

'yyyy-mm'

)= to_date(

'$',

'yyyy-mm'

)

時間戳型別轉成時間

-- 等於

and to_char(to_date(

'1970/01/01 08:00:00'

,'yyyy/mm/dd hh24:mi:ss'

)+ create_date/

(1000*60

*60*24

),'yyyy'

)= to_char(sysdate,

'yyyy'

)-- 大於等於

and to_date(

'1970/01/01 08:00:00'

,'yyyy/mm/dd hh24:mi:ss'

)+ create_date/

(1000*60

*60*24

)>

= to_date(

'1970/01/01 08:00:00'

,'yyyy/mm/dd hh24:mi:ss'

)+ $/

(1000*60

*60*24

)

時間型別

-- 等於

and to_char(create_time,

'yyyy'

)= to_char(sysdate,

'yyyy'

)-- 大於等於

and to_date(

'1970/01/01 08:00:00'

,'yyyy/mm/dd hh24:mi:ss'

)+ create_date/

(1000*60

*60*24

)>

= to_date(

'1970/01/01 08:00:00'

,'yyyy/mm/dd hh24:mi:ss'

)+ $/

(1000*60

*60*24

)

大於等於

--本年  and to_char(create_date,'yyyy')=to_char(sysdate,'yyyy')

--本月 and to_char(create_date,'yyyy-mm')=to_char(sysdate,'yyyy-mm')

--本日 and to_char(create_date,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd')

--自定義 and create_date >= # and create_date <= #

Oracle 日期型別問題

1.發生ora 01830 日期格式在轉換整個輸入字串之前 的錯誤資訊 有幾種可能 1 查詢的時候 select to date invoice date,yyyy mm dd from tab invoice date varchar2 30 提示 ora 01830 日期格式在轉換整個輸入字串之...

Oracle 日期型別資料加減

1 最常見的方式 select sysdate 當前時間 sysdate 1 當前時間減1天 sysdate 1 當前時間加1天 sysdate 1 24 當前時間減1小時 sysdate 1 24 60 當前時間減1分鐘 sysdate 1 24 60 60 當前時間減1秒 2 使用系統函式 為了...

oracle中日期型別DATE TIMESTAMP

1 date型別精確到秒,timestamp型別精確到秒的小數,2 date型別相減,得到的結果為整型,單位是天。timestamp型別相減,或者timestamp與date型別相減,得到的結果是interval。date與timestamp型別加減乙個數值,得到的型別為date。3 oracle中...