我正在使用的查询是
String sql=select trim(CdateTo) cdate,
count(case when Verified = 'WithGrant' then 1 end) as grant,
count(case when Verified = 'WithDiscount' then 1 end) as CC
from mse where Verified IN ('WithDiscount','WithGrant') and
CdateTo > SYSDATE - 9
GROUP BY trim(CdateTo)
ORDER BY TO_DATE(cdate,'DD/MM/YYYY')
和spring jdbcTemplate代码类似
try {
return jdbcTemplate.query(sql, new RowMapper<Trif>() {
@Override
public Trif mapRow(ResultSet rs, int rowNum) throws SQLException {
Trif trif = new Trif();
*************some code*******
Trif.setDate(rs.getString("cdate"));
***********someCode*********
return trif;
}
});
} catch (DataAccessException e) {
return null;
}
这回复了我的日期,如31-MAY-16 在我想要的地方应该像5月31日那样回到我那里,五月份首都在首都出现,其他人则在小 我怎么能实现这个目标?
答案 0 :(得分:0)
如果您可以假设日期始终格式化为DD-MONTH-YY,则此代码应该适合您:
private String capitalizeMonth(String s) {
char[] c = s.toLowerCase().toCharArray();
c[s.indexOf('-') + 1] = Character.toTitleCase(c[s.indexOf('-') + 1]);
return new String(s);
}
答案 1 :(得分:0)
正如已经建议的那样,你可以在Java端处理这个案例。 但是,在您的查询中,有一些地方需要注意。
你有
select trim(CdateTo) cdate,
这意味着只要CdateTo是varchar本身就返回一个很好的varchar。 但是
CdateTo > SYSDATE - 9
表示在其中一行中有一个隐式类型转换 - 这取决于NLS设置。一旦默认设置发生变化 - 您的代码可能会崩溃。
现在有了原始问题。 Oracle有一个非常好的函数INITCAP
,可以完成你真正需要的工作。做这样的事情
select initcap(trim(CdateTo)) cdate
可能有帮助。
但是,如果CdateTo
列的类型为DATE
,那么处理问题的正确方法是:
select trim(to_char(CdateTo,'dd-Mon-yy')) cdate,
注意格式掩码和Mon
中的大写字母M - 这将使您的结果保持一致且独立于会话/系统设置的变化