2016-06-01 7 views
-1

Die Abfrage, die ich verwende istWie bekomme ich den Monat in kleinen Buchstaben mit jdbcTemplate?

 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') 

und die Feder jdbcTemplate Code ist wie

 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; 
     } 

mich das Rückreisedatum wie 31-MAY-16 wo ich es will, sollte mich wie 31 zurückkehren -Mai-16, wo der Monat Mai ersten Buchstaben in der Hauptstadt zeigt und andere sind in kleinen wie kann ich das erreichen?

+0

Warum verwalten Sie nicht einfach eine einfache String-Operation? Hier sind Sie: String smallLetters = rs.getString ("cdate"); etc. etc. –

+0

Behandeln Sie dies einfach auf der Java-Seite, wo die Anwendung staatenlos bleiben und skalieren kann. Die SimpleDateFormat-Klasse kann dies problemlos verwalten. –

Antwort

0

Wenn Sie das Datum übernehmen können, wird immer als DD-MONATS-JJ formatiert für Sie diesen Code sollte funktionieren:

private String capitalizeMonth(String s) { 
     char[] c = s.toLowerCase().toCharArray(); 
     c[s.indexOf('-') + 1] = Character.toTitleCase(c[s.indexOf('-') + 1]); 
     return new String(s); 
    } 
0

Wie bereits geraten, können Sie den Fall auf Java-Seite behandeln. In Ihrer Anfrage gibt es jedoch einige Orte, auf die Sie achten sollten.

Sie haben

select trim(CdateTo) cdate, 

, das bedeutet, dass Sie eine varchar zurück, die so lange in Ordnung, wie die CdateTo selbst varchar. Aber

CdateTo > SYSDATE - 9 

bedeutet, dass in einer dieser Zeilen, die Sie haben eine implizite Typumwandlung - und dies hängt von den NLS-Einstellungen. Sobald sich die Standardeinstellungen ändern, könnte Ihr Code kaputt gehen.

Jetzt mit der ursprünglichen Frage. Oracle hat eine wirklich nette Funktion, INITCAP, die das tut, was Sie wirklich brauchen. so etwas wie select initcap(trim(CdateTo)) cdate könnte helfen.

Wenn jedoch die Art Ihrer CdateTo Spalte ist DATE, dann der richtige Weg, mit dem Problem umzugehen wäre:

select trim(to_char(CdateTo,'dd-Mon-yy')) cdate, 

Achten Sie auf die Formatmaske und der Hauptstadt M in Mon - dies wird Machen Sie Ihr Ergebnis konsistent und unabhängig von Änderungen in den Sitzungs-/Systemeinstellungen

+0

danke mann. Ich handle bereits auf der Java-Seite mit dieser Situation, aber ich suche nach einer Abfragelösung. Ich habe auch versucht, trim (to_char (CdateTo, 'dd-Mon-yy')), aber diese Abfrage braucht eine Menge Zeit. Weil ich riesige Daten habe. Deine Erklärung wird mir aber helfen :) – suraha