簡體   English   中英

sql server jdbc查詢datetime列

[英]sql server jdbc query on datetime column

我環顧四周,並可能似乎無法找到這個特別要求,在左右,但我發現像類似的問題這一個關於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. 我用DateTime.now().minusHours( 1 ).toGregorianCalendar()DateTime.now().minusHours( 1 ).toGregorianCalendar().getTime()替換parameterSource對象
  3. 我嘗試注釋掉的行,但是將類型更改為Timestamp

所以,這是我的一個或多個問題...

在SQL Server中的datetime列上進行查詢是否存在已知的bug \\問題?

為什么我必須使用Time而不是Timestamp

我懷疑直接查詢對象時,Spring將日期對象轉換為Timestamp (如#2所示)。

  1. TIMESTAMP是服務器生成的值,用於幫助實現data consistency ,它不是簡單的數據類型,因此為了storing datetime value ,請避免使用TIMESTAMP數據類型。

  2. 另外,SQL Server TIMESTAMP confusing ,並且deprecated ROWVERSION keyword代替,它可以減少混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM