您的位置:首页 > 其它

mybatis 关于时间的问题与技巧

2017-01-19 16:41 330 查看
原文http://www.cnblogs.com/ElEGenT/p/4794035.html

此执行是在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: 报错:   文字与格式字符串不匹配     转换类型不匹配

sql6: column1 :   2015/8/27 20:20:20  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: