java - 与mybatis、postgresql对比时间戳

标签 java timestamp alfresco mybatis

我正在使用 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呢?

最佳答案

我发布的是正确答案。

这是我的代码

<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),
);

关于java - 与mybatis、postgresql对比时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632392/

相关文章:

Java REST boolean 字段的部分更新

python - 在 pandas 中,如果我们通过平均将 1 分钟间隔数据重新采样为 15 分钟间隔,我们可以选择如何重新采样和分配数据

java - 使用带有 Restful Web 服务的开放 cmis 在 Alfresco 中创建文件夹

java - 使用 CMIS 创建两个文件 (Alfresco CE 4.2.c) 之间的关系

java - 从 String 创建时可以保留 UUID 大小写吗?

java - 了解 Integer.highestOneBit() 方法实现背后的逻辑

java - Liferay:如何使enctype ="multipart/form-data"和方法="post"一起工作?

scala - 在给定时间戳下以星火打开文件

XML Hive Serde 提取时间戳 Hadoop

javascript - Alfresco JavaScript API - 复制文件