今早做一個查詢頁面時,需要查詢兩個時間區間的跨度,使用TO_DATE函數,一開始寫成了
Sql代碼
TO_DATE('2014-08-04 00:00:00','YYYY-MM-DD HH:mm:ss')
結果報ORA-01810 格式代碼出現兩次的錯誤.後來上網查詢後,發現是格式化字符串有問題,
其中不應該將某個格式重復兩次,否則Oracle就不知道要從哪個占位區間去解析該字段了,
正確的格式應該是這樣的,用MI來代表分鐘
正確Sql代碼 :
TO_CHAR('2014-08-04 00:00:00','YYYY-MM-DD HH:MI:SS')
如果HH對24時制支持不好的話 可以寫成下面的格式
Sql代碼 :
TO_CHAR('2014-08-04 00:00:00','YYYY-MM-DD HH24:MI:SS')
ORACLE中的格式化字符串不區分大小寫
修改答復:很抱歉,java.sql.Date()肯定是在什麼地方用的,好像是Hibernate的時候可以直接設值,現在不用Hibernate就只能用to_date函數了 改成下面的吧 呵呵!!
import java.util.Date;導入util包下的Date類 用於後面to_date使用
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd hh:mm:ss");
String nowdate = sdf.format(new Date());
System.out.println(nowdate);
sql= "insert into tablename(colname) values(to_date('"+nowdate+"','yy-MM-dd hh:mm:ss'))";
statement.execute(sql);這樣肯定就好了
1、如果time是字符串'yyyy-MM-dd-hh-mm-ss'格式,di、d2采用字符'yyyy-MM-dd-hh-mm-ss'格式。語句可寫成如下:
sql:='select * from table1 where time between d1 and d2';
2、如果time是日期型則應該是'2012-9-8 18:55:00' 或 '08-9月 -12 08.50.45' 格式,di、d2采用字符'yyyy-MM-dd-hh-mm-ss'格式。語句可寫成如下:
sql:='select * from table1 where to_char(time,'||chr(39)||'yyyy-mm-dd-hh-mm-ss'||
chr(39)||') between d1 and d2';