2011-10-25 126 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 ] 
} 
相關問題