oracle:
此執行是在oracle下!
關於日期和時間的問題,date只有日期 timestamp 帶有時分秒
一 #號取值
1.date
insert into table (column1) values (
#{aa,jdbcType=DATE})
語句執行的sql:
insert into table (column1) values (
to_date('08/27/2015 20:20:20', 'mm/dd/yyyy hh24:mi:ss'))
實際插入到數據庫的結果:
2015/08/27
--只有日期! 沒有時間
** PS: 如果 aa取值時是null 或 "" 則插入到數據庫里的為 null
2.timestamp
insert into table (column1) values (
#{aa,jdbcType=TIMESTAMP})
語句執行的sql:
insert into table (column1) values (
to_ timestamp('08/27/2015 20:20:20.000', 'mm/dd/yyyy hh24:mi:ss.ff3'))
實際插入到數據庫的結果:
2015/08/27 20:20:20
--帶有時分秒的
二 直接用to_date() / to_timestamp()函數
前提:這兩個函數不能用於java里的Date類型,只能用於String類型,即aa 的數據類型只能是String
mybatis在處理to_date函數時(to_timestamp()同理)
#{aa} 沒有指定jdbctype, 則根據java數據類型給出一個jdbctype, 但如果 aa為null 或 "" 則出報錯
#{aa,jdbcType=DATE} ,指定jdbctype后,會轉換為相應的jdbctype,但如果類型不匹配,則報錯. 如果 aa為null 或 "" 則aa 取值為null
PS: java.util.Date aa mybatis默認給出的jdbctype=TIMESTAMP 即:#{aa} 等價於 #{aa,jdbcType=TIMESTAMP}
1. to_date()
sql1:
insert into table (column1) values (to_date(
#{aa},'YYYY-MM-DD'))
sql2: insert into table (column1) values (to_date(
#{aa},'YYYY-MM-DD hh24:mi:ss
'))
執行的sql語句:
sql1: insert into table (column1) values (to_date('2015-09-08 20:20:20'
,'YYYY-MM-DD'))
sql2: insert into table (column1) values (to_date('2015-09-08 20:20:20'
,'YYYY-MM-DD hh24:mi:ss
'))
執行結果:
sql1: 報錯:
日期格式圖片在轉換整個輸入字符串之前結束 轉換類型不匹配
sql2: column1 : 2015-09-08 20:20:20
2. to_timestamp()
sql3:
insert into table (column1) values (to_timestamp(
#{aa},'YYYY-MM-DD'))
sql4: insert into table (column1) values (to_timestamp(
#{aa},'YYYY-MM-DD hh24:mi:ss
'))
執行的sql語句:
sql3: insert into table (column1) values (to_timestamp('2015-09-08 20:20:20'
,'YYYY-MM-DD'))
sql4: insert into table (column1) values (to_timestamp('2015-09-08 20:20:20'
,'YYYY-MM-DD hh24:mi:ss
'))
執行結果:
sql3: 報錯:
日期格式圖片在轉換整個輸入字符串之前結束 轉換類型不匹配
sql4: column1 : 08-9月 -15 08.20.20.000000000 下午
//timestamp 帶有更多的時間信息
三 直接取值
沒有jdbctype 沒有to_date函數 column1的類型為date
sql5:
insert into table (column1) values (
#{aa}) //aa的java 數據類型為String
sql6:
insert into table (column1) values (
#{aa}) //aa的java 數據類型為 java.util.Date
執行的sql語句:
sql5: insert into table (column1) values ('2015-09-08 20:20:20')
sql6: insert into table (column1) values (to_timestamp('09/08/2015 15:14:38.000'
,'
mm/dd/yyyy hh24:mi:ss.ff3
'))
執行結果:
sql5: 報錯:
文字與格式字符串不匹配
轉換類型不匹配
sql4: column1 : 2015/8/27 20:20:20