1

我环顾四周,似乎找不到在 SO 上专门提出的问题,但我发现了类似的问题,例如这个问题以及很多关于 SQL 本身或 C# 的问题......

这是我所看到的:

MapSqlParameterSource parameterSource = new MapSqlParameterSource();
        //parameterSource.addValue( "insertDate", DateTime.now().minusHours( 1 ).toGregorianCalendar(), Types.TIME );
        parameterSource.addValue( "insertDate", new Timestamp( DateTime.now().minusHours( 1 ).getMillis() ) );

        List< String > contents =
            _simpleJdbcTemplate
                .query(
                    "SELECT TOP (200) inserteddatetime, Contents FROM dbo.tsomeTable WHERE (ServiceName = 'something') and inserteddatetime > :insertDate",
                    new RowMapper< String >() {
                        @Override
                        public String mapRow( final ResultSet rs, final int rowNum ) throws SQLException {
                            System.out.println( rs.getTimestamp( "inserteddatetime" ) );

                            return rs.getString( "Contents" );
                        }
                    }, parameterSource );

查询“挂起”\什么都不做\从不返回,如果:

  1. 我使用未注释的 Timestamp 对象(如上所示)
  2. 我用或替换parameterSource对象DateTime.now().minusHours( 1 ).toGregorianCalendar()DateTime.now().minusHours( 1 ).toGregorianCalendar().getTime()
  3. 我尝试注释掉的行,但将类型更改为Timestamp

所以,这是我的一个或多个问题......

在 sql server 中查询日期时间列是否存在已知错误\问题?

为什么我必须使用Time而不是Timestamp

我怀疑 Spring 将日期对象转换为Timestamp当我直接查询对象时(如 #2 所示)。

4

1 回答 1

1
  1. TIMESTAMP是用于帮助的服务器生成的值data consistency,它不是一个简单的数据类型,所以对于storing datetime value,避免使用 TIMESTAMP 数据类型。

  2. 此外,SQL Server TIMESTAMP 是confusing,它是deprecated. 它被替换为ROWVERSION keyword,这应该可以减少混乱。

于 2012-09-06T08:43:43.927 回答