javaの以下のコードで、postgresから最大の日付(型はcharacter(8)でyyyyMMdd形式)を取ろうとしたところ、
レコードの検索は成功するのですが、取れた日付がCharacter型の'2'だけでした。
pgAdminで同一SQLを実行したところ、結果はきちんと最大日付8桁取得出来ましたが、型はcharacter(8)でなくbpcharというものでした。
Max関数をSQLから外すと、Stringで8桁のyyyyMMddが取得できます。
どうすればStringで8桁の最大年月日が取得できるでしょうか?
【バージョン】
Postgres:9.4
Java :7
【postgres】
sql
1CREATE TABLE test 2( 3 ymd character(8) NOT NULL, -- 年月日(例:20171130) 4) 5WITH ( 6 OIDS=FALSE 7); 8ALTER TABLE test 9 OWNER TO postgres;
【java】
java
1import javax.persistence.Column; 2import javax.persistence.Entity; 3import javax.persistence.Id; 4import javax.persistence.Table; 5/**********************************/ 6/** エンティティ 7/**********************************/ 8@Entity 9@Table(name="test") 10public class Test implements Serializable{ 11 /** 年月日 */ 12 @Column(name="ymd", nullable=false) 13 private String ymd; 14 15 /** 16 * 年月日を取得します。 17 * @return 年月日 18 */ 19 public String getYmd() { 20 return ymd; 21 } 22 /** 23 * 年月日を設定します。 24 * @param ymd 年月日 25 */ 26 public void setYmd(String ymd) { 27 this.ymd = ymd; 28 } 29}
java
1/**********************************/ 2/** 最大の年月日を取得する 3/**********************************/ 4 @PersistenceContext 5 private EntityManager manager; 6 7 public String getMaxDate(){ 8 /***************/ 9 /** SQL作成 */ 10 /***************/ 11 String query = "select MAX(t.ymd) from test t"; 12 /*************/ 13 /** 検索実行 */ 14 /*************/ 15 Query q = manager.createNativeQuery(query); 16 List<Object[]> queryResultList = q.getResultList(); 17 18 return queryResultList.get(0)[0].toString(); 19 }
回答2件
あなたの回答
tips
プレビュー