2011-10-25 19 views
0

データベースに文字列として格納されている数値があります。Grails sortableColumnsを使用して数値をソートしたいと思います。これを行うためにとにかくありますか?Grails - sortableColumn - 数値文字列の数値ソートを強制する

+1

なぜ数字をデータベースに文字列として保存していますか? – OverZealous

+0

アイデアは、表示目的でのみテーブルを作成することでした。ブラジルの標準が桁ではなく桁を区切るための昏睡であるため、表示用に専用のテーブルがあり、その番号はストリングとして格納する必要があります。 –

+0

数値の書式設定されたビューは表示関数です。データベースに保存しないでください。データベースはデータを格納するためのもので、格納しているデータを表す必要があります。数字が表示された時点で正しい書式設定を適用するのは簡単です。ソートする必要がある場合は、文字列を数字で並べ替えることがパフォーマンスの低下につながります(どのように行っても問題ありません)。他のすべてのこと(比較など)はもちろん遅いです。 – OverZealous

答えて

1

数字を書式設定された文字列として保存することで、数値の自然なソートを利用できなくなります。実際の数値データを使用することができ、フォーマットされた文字列を表示目的で保存する必要がないように、小数点区切り文字を表示するために希望のロケールを使用できるGrailsのformatNumberタグを見てください。

ソートしたいドメインクラスがフォーマットされ、フォーマットされていない数値データの両方を持っている場合は、必要に応じてソート列のparamに置き換えて、このような何かを試みることができる:

def list = { 

    if (params?.sort == 'formattedNumber') { 
    params.sort = 'rawNumber' 
    } 

    [ records : Record.list(params) ] 
} 

あなたのドメインクラスのみを持っている場合書式設定された文字列をBigDecimal(またはそれに相当する数値型)に解析できますが、サーバーのロケールが文字列形式の小数点記号のロケールと一致しない場合、正しく動作しない可能性があります。

def list = { 

    def records = (params?.sort == 'formattedNumber') Record.list().sort{ it.formattedNumber.toBigDecimal() : Record.list(params) 
    } 

    [ records : records ] 
} 
関連する問題