C0d*_*ack 9 testing oracle grails grails-orm
我正在使用GORM在Grails中编写集成测试.
我想做类似以下的事情:
delete from Statistic
where stat_date = TO_DATE(:month_year, 'MON-YYYY')
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
java.sql.SQLException:意外的标记:语句中的TO_DATE [从统计信息中删除stat_date = TO_DATE(?,'MON-YYYY')]
我认为错误是由GORM使用的内存数据库(是H2吗?)不支持to_date函数引起的.
有关如何编写删除SQL的任何想法,以便它在测试和实时工作?
因为我只关心月份和年份,我认为我将删除stat_date在给定月份的第一个和最后一个日期之间的记录.
任何人都可以想到更好的方法吗?
blu*_*man 25
这仍然是谷歌搜索的第一名,所以这里对我有用.
我的单元测试/本地环境使用sql文件构建和填充模式.我在sql文件中创建了以下别名
-- TO_DATE
drop ALIAS if exists TO_DATE;
CREATE ALIAS TO_DATE as '
import java.text.*;
@CODE
java.util.Date toDate(String s, String dateFormat) throws Exception {
return new SimpleDateFormat(dateFormat).parse(s);
}
';
Run Code Online (Sandbox Code Playgroud)
请注意在h2用户定义的函数中使用单引号而不是$$,因为这是唯一适用于我的格式.
我必须调整bluesman的答案,以使其适用于我们的Oracle sql中常用的日期格式.
此版本支持'DD-MON-YYYY'等日期格式
-- TO_DATE
drop ALIAS if exists TO_DATE;
CREATE ALIAS TO_DATE as '
import java.text.*;
@CODE
java.util.Date toDate(String s, String dateFormat) throws Exception {
if (dateFormat.contains("MON")) {
dateFormat = dateFormat.replace("MON", "MMM");
}
if (dateFormat.contains("Y")) {
dateFormat = dateFormat.replaceAll("Y", "y");
}
if (dateFormat.contains("D")) {
dateFormat = dateFormat.replaceAll("D", "d");
}
return new SimpleDateFormat(dateFormat).parse(s);
}
';
Run Code Online (Sandbox Code Playgroud)
我发现这篇博客上的提示http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/有助于弄清楚如何将Oracle日期格式转换为SimpleDateFormat的格式.
小智 5
java.util.Date toDate(String dateTime, String dateFormat) throws Exception {
if (dateFormat.contains("MON")) {
dateFormat = dateFormat.replace("MON", "MMM");
}
if (dateFormat.contains("Y")) {
dateFormat = dateFormat.replaceAll("Y", "y");
}
if (dateFormat.contains("D")) {
dateFormat = dateFormat.replaceAll("D", "d");
}
if (dateFormat.contains("HH")) {
dateFormat = dateFormat.replaceAll("HH", "hh");
}
if (dateFormat.contains("hh24")) {
dateFormat = dateFormat.replaceAll("hh24", "hh");
}
if (dateFormat.contains("MI") || dateFormat.contains("mi")) {
dateFormat = dateFormat.replaceAll("MI", "mi").replaceAll("mi", "mm");
}
if (dateFormat.contains("SS")) {
dateFormat = dateFormat.replaceAll("SS", "ss");
}
return new SimpleDateFormat(dateFormat).parse(dateTime);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8223 次 |
最近记录: |