0
您好,感謝您閱讀我的文章。適用於字符串和Java結果集的PostgreSQL MAX聚合函數
我有一個PostgreSQL表「t」與列「c」類型是「字符變化(32)」。
此列中的值如下所示:「2014100605」。
我正在使用「MAX()」聚合函數來檢索此列中的最大值。
SELECT MAX(c) AS max FROM t;
在Java中,如果我準備上面的查詢,得到一個 「的resultSet」 對象,並給它發送的getString( 「MAX」)的消息,我得到最大= NULL。
如果我將它發送給getInt(「max」)方法,我會得到我期待的結果,如「2014100605」。
這是正常的行爲嗎?
我真的可以這樣做嗎?或者是偶然的,我得到了預期的結果?
「MAX()」實際上是否使用了字典順序?
此致敬禮。
的Java代碼位:
s_preparedSqlQuery =
"SELECT MAX(quotinv_nro) AS quotinv_nro_max "
+ "FROM imw_quotation_invoice "
+ "WHERE quotinv_type = ? "
+ "AND quotinv_nro LIKE '" + s_quotinvDate + "%'";
preparedStatement = m_connection.prepareStatement(s_preparedSqlQuery);
preparedStatement.setString(1, s_quotinvType);
resultSet = preparedStatement.executeQuery();
if(resultSet != null)
{
if(resultSet.next())
{
// s_quotinvNroMax = resultSet.getString("quotinv_nro_max");
n_quotinvNroMax = resultSet.getInt("quotinv_nro_max");
// if(s_quotinvNroMax == null)
if(n_quotinvNroMax == 0)
{
n_nbQuotinvsThisSameDate = 0;
return n_nbQuotinvsThisSameDate;
}
else
{
s_quotinvNroMax = Integer.toString(n_quotinvNroMax);
n_length = s_quotinvDate.length();
s_currentMaxNro = s_quotinvNroMax.substring(n_length - 1);
n_nbQuotinvsThisSameDate = Integer.valueOf(s_currentMaxNro);
}
}
}
請顯示您的完整Java代碼。但總的來說:varchar列上的最大值將使用ascii排序,因此值'2'將大於'10'。問題的根本原因是您在數據庫中選擇了錯誤的數據類型。您的值看起來像日期或時間戳可疑。如果是這樣的話,可以使用'date'或'timestamp'列,所有的比較都會像你期望的那樣神奇地工作。如果這是一個普通的數字,使用'integer'。 – 2014-10-06 09:59:07
我懷疑是使用'max'作爲列名的衝突 - 嘗試別的方法,比如'maxx'。 – 2014-10-06 10:01:13
我試着編輯我的第一篇文章:我無法正確格式化代碼。我一直在努力幾十分鐘,這讓我瘋狂。我們不能沒有它嗎? – 2014-10-06 10:59:32