電子書籍の厳選無料作品が豊富!

strDtとsysDtで20190701、20210801の8桁ずつ取りたいのですが
どうしてもsysDtのほうは"/"が入ってしまい”2021/08/”になります…
substringの使い方調べてもいまいちピンとこなくって…
どなたかご教示頂けませんでしょうか…

public static List<Info> condition(String sysDateTime,String retention){
PreparedStatement stm = null;
ResultSet rs = null;
int ret = 0;
//①の計算
String strDt = Month(sysDateTime,retention);
String sysDt = sysDateTime.substring(0,8);

List<Info> infoList = new ArrayList<Info>();

String sql = "SELECT A,A1,A2,A3,A4"
+ " FROM OYA WHERE SUBSTR(from_dateTime,1,8) <=?"
+ "AND SUBSTR(to_dateTime,1,8) <=?";

try {
stm = conn.prepareStatement(sql);
stm.setString(1, strDt);
stm.setString(2, sysDt);
logger.info(sql);
rs = stm.executeQuery(sql);
while (rs.next()) {
Info info = new Info();
info.A = rs.getString("A");
info.A1 = rs.getString("A1");
info.A2 = rs.getString("A2");
info.A3 = rs.getString("A3");
info.A4 = rs.getString("A4");
infoList.add(info);
}

} catch (SQLException e) {
e.printStackTrace();
}

try {
if ((rs != null)||(stm != null)||(con != null)) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
return infoList;

A 回答 (3件)

>condition(String sysDateTime,String retention)



渡された値(sysDateTimeの)が「2021/08/16 15:42:30」みたいな文字列なのでは。
だとすると単純にsubStringするだけではだめかと。

sysDateTimeの先頭4文字+6~7文字+9~10文字みたいに複数の部分文字列を連結するとか、いったん日付型値に変換してから書式化するとか。
(添付図はpaiza.ioでの例。ちょっとボケてますが)
「日付をyyyyMMddで取得したい。」の回答画像2
    • good
    • 0
この回答へのお礼

subStringとreplaceで無事解決しました!
ありがとうございました(TT)!

お礼日時:2021/08/17 13:23

sysDateTimeの形式が不明だけど


SimpleDateFormatでDate経由で変換する。
    • good
    • 0
この回答へのお礼

私のやり方が悪かったんだと思います…
別の形で解決しました!ありがとうございました^^

お礼日時:2021/08/17 13:22

teratail【テラテイル】|ITエンジニア特化型Q&Aサイト


https://teratail.com/
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!