1

mybatisを使用してpostgresDBをクエリしています。問題はタイムスタンプ間の比較です。例外をスローしていなくても、必要な結果を再実行しないため、正しく機能していないと思います。これが私のコードです

<select id="select_count" parameterType="map" resultType="map">
        select count(*) as count, TO_CHAR(created_on, #{xaxis}) as xaxis,state 
        from my_table
        where 1 = 1
        <if test="fromdate != null"> and created_on &gt;= #{fromdate} </if>
        <if test="todate != null"> and created_on &lt;= #{todate} </if>
        <if test="state != null"> and state = #{state} </if>
        GROUP BY xaxis, state
</select>

これが私のJavaコードです

public List<Map<String, Object>> getStatesCount(Date fromDate,
                Date toDate, String state, String xAxis) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("fromdate", fromDate);
        params.put("todate", toDate);
        params.put("state", state);
        params.put("xaxis", "yyyy-mm-dd");
        List<Map<String, Object>> sqlResults = (List<Map<String, Object>>) template.selectList(SELECT_COUNT, params);
        return sqlResults;
    }

これはmy_tableを作成するためのコードです

CREATE SEQUENCE my_table_seq START WITH 1 INCREMENT BY 1;
CREATE TABLE my_table
(
   id INT8 NOT NULL DEFAULT NEXTVAL('my_table_seq'),
   state VARCHAR(20),
   created_on TIMESTAMP WITH TIME ZONE,
   PRIMARY KEY (id),
);

私のテーブルには、「created_on」プロップが今日の日付に設定された多くの行があることを知っています。しかし、2つの日付パラメータまたはそのうちの1つを渡すと、selectクエリはデータを返しません。

では、タイムスタンプとを使用して適切にクエリを実行する方法はjava.util.Date

4

1 に答える 1

3

正解を投稿しています。

これが私のコードです

<select id="select_count" parameterType="map" resultType="map">
    select count(*) as count, TO_CHAR(created_on, #{xaxis}) as xaxis,state 
    from my_table
    where 1 = 1
    <if test="fromdate != null"> and created_on &gt;= #{fromdate} </if>
    <if test="todate != null"> and created_on &lt;= #{todate} </if>
    <if test="state != null"> and state = #{state} </if>
    GROUP BY xaxis, state
</select>

これが私のJavaコードです

public List<Map<String, Object>> getStatesCount(Date fromDate,
            Date toDate, String state, String xAxis) {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("fromdate", fromDate);
    params.put("todate", toDate);
    params.put("state", state);
    params.put("xaxis", "yyyy-mm-dd");
    List<Map<String, Object>> sqlResults = (List<Map<String, Object>>) template.selectList(SELECT_COUNT, params);
    return sqlResults;
}

これはmy_tableを作成するためのコードです

CREATE SEQUENCE my_table_seq START WITH 1 INCREMENT BY 1;
CREATE TABLE my_table
(
  id INT8 NOT NULL DEFAULT NEXTVAL('my_table_seq'),
  state VARCHAR(20),
  created_on TIMESTAMP WITH TIME ZONE,
  PRIMARY KEY (id),
);
于 2013-04-16T09:35:05.277 に答える