レッツを最小値、最大値と平均値を見つけるには、私がデータ分割列とOracleのクエリで
Name Fee
Student1 Fee paid : 100rs
Student2 Fee paid : 500rs
Student3 Fee paid : 200rs
の下に持って考える私は最大、最小、最大分割する必要が手数料列の平均値を選択する必要があります:とRSここでは例のために
区切り 結果は
Min Max Avg
100 500 250
レッツを最小値、最大値と平均値を見つけるには、私がデータ分割列とOracleのクエリで
Name Fee
Student1 Fee paid : 100rs
Student2 Fee paid : 500rs
Student3 Fee paid : 200rs
の下に持って考える私は最大、最小、最大分割する必要が手数料列の平均値を選択する必要があります:とRSここでは例のために
区切り 結果は
Min Max Avg
100 500 250
あなたはそのために正規表現を使用することができます:
select min(fee_num), max(fee_num), avg(fee_num)
from (
select to_number(regexp_substr(fee, ':\s*(\d+)\s*rs', 1, 1, null, 1)) fee_num
from mytable
)
(Oracle 11gの以降で利用可能)regexp_substr
の6 番目の引数には、キャプチャグループにマッチしたテキストのみを返すことができます(すなわち、この場合は\d+
)。
正規表現は、その後、いくつかの数字(複数可)(\d+
)、再びその次rs
と、任意の空白が続くを有するように、任意に空白(\s*
)が追従すべき:
必要とします。
テキスト列から金額を取得すると、構造化されたデータベースから得られる利点はありません。その列の索引は使用されず、正規表現による抽出にはオーバーヘッドが伴います。
正規化されたリレーショナルデータベース設計では、フィールドには原子データのみが含まれます。この場合、fee
列には金額のみが含まれ、数値データ型である必要があります。料金について知る必要があるその他の情報は、別の列に保管してください。
この質問には*名前*列は何がありますか? – trincot
将来、このようなデータは実際には保存しないでください。数値データを独自の数値列に格納します。カラムから意味のあるものを得るために文字列を分割することは、実際には良い設計の決定ではありません。 – Kritner