1

我正在使用 mybatis 查询我的 postgres 数据库,我的问题是时间戳之间的比较,我认为它无法正常工作,因为即使它没有抛出任何异常,它也不会重新运行所需的结果。这是我的代码

<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' 属性设置为 ,比如说今天的日期。但是当我传递我的两个日期参数甚至其中之一时,选择查询不会返回任何数据。

那么如何正确查询时间戳和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 回答