2017-01-17 6 views
-4

実際に私はこのような - abc1、abc2、..、abc50、pqr1、pqr2、...、pqr120、xyz1のようなデータを持っています、XYZ2、...、xyz200 .Now私はこのクエリを使用し、この目的のために接頭辞xyz.Soを持つために最大値を取得したい--`英数字の文字列から最大値をDB2データベースの数値に基づいて検索します

select MAX(fieldName) from table where fieldName like 'xyz%' 

このクエリは、最大としてxyz99として結果を返していましたが、期待される結果はxyz200 maxでなければなりません。今私は希望のoutput.ORを得るためにMAX関数で 'like'クエリを使用する方法を知りたいので、その数値に基づいて最大値を見つける方法があります。

+2

あなたは、MySQL、OracleまたはDB2を使用していますか?関与していない製品にはタグを付けないでください。 – jarlh

+0

私はdb2データベースを使用しています。 –

+0

その後、MySQLタグとOracleタグを削除できます。 – jarlh

答えて

0

文字部分と整数部に xxxnnn値を分離するために、この

SELECT max(CAST(substring(fieldName,4) AS UNSIGNED)) AS maxVal 
FROM `table` 
WHERE fieldName LIKE 'xyz%' 
+0

私はこれを以下のようにエラーにしています - 引数のデータ型、長さ、または引数の1が無効ですSQLコード:-171、SQL状態:42815 –

+0

ここにあなたの質問を書いてください?あなたはmysqlを使用していますか? – Sadikhasan

+0

私はDB2を使用しています。このクエリを参照 SELECT max(CAST(部分文字列(ID、4)AS UNSIGNED))AS maxVal FROMテーブルWHERE ID LIKE 'xyz%'; これは4の使用は何ですか? –

0

使用SUBSTR()を試してみてください。 Cast文字列の整数部分を整数に変換します。 Order byこれらの2つの部分は別々に降順です。最大値を選択するにはFETCH FIRSTを使用してください。

select fieldName 
from table 
where fieldName like 'xyz%' 
order by substr(fieldName,1,3) desc, 
     cast(substr(fieldName,4) as integer) desc 
fetch first 1 row only 
+0

私はこのエラーが発生しています 文字列引数の値がSYSIBM.INTEGER関数に受け入れられませんでしたSQLコード:-420、SQL状態:22018 –

+0

'select 'xyz%' 'のようなfieldName、substr(fieldName、1,3)、substr(fieldName、4) 3番目の列の非整数 – jarlh

+0

ありがとうございました....あなたの答えは、私に望ましい出力を得る正しい方法を教えてくれます。ありがとう。 –

1
select * from table 
where substring(fieldName,3,length(fieldName)-3) = 
(select max(substring(fieldName,3,length(fieldName)-3)) 
from table) 
関連する問題