String Grails-sortableColumn-强制对数字字符串进行数字排序

String Grails-sortableColumn-强制对数字字符串进行数字排序,string,grails,jquery-ui-sortable,numerical,String,Grails,Jquery Ui Sortable,Numerical,我将数字作为字符串存储在数据库中,我希望使用Grails sortableColumns对它们进行数字排序。有什么办法可以这样做吗 将数字存储为格式化字符串可防止它们利用本机数字排序。看看Grails formatNumber标记,它可以使用所需的区域设置来显示十进制分隔符,这样您就可以使用实际的数字数据,而不必为了显示目的而存储格式化的字符串 如果要排序的域类同时包含格式化和未格式化的数字数据,可以尝试以下操作,根据需要替换排序列param: def list = { if (param

我将数字作为字符串存储在数据库中,我希望使用
Grails sortableColumns
对它们进行数字排序。有什么办法可以这样做吗

将数字存储为格式化字符串可防止它们利用本机数字排序。看看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 ]
}

为什么要将数字作为字符串存储在数据库中?其想法是创建一个仅用于显示目的的表。我有一个专门用于显示的表,这些数字需要存储为字符串,因为巴西的标准是将数字分隔开,而不是点。数字的格式化视图是一个显示函数,不应保存在数据库中。数据库是用来存储数据的,因此它应该表示它正在存储的数据。在显示数字时应用正确的格式很简单。如果您需要对其进行排序,那么将字符串作为数字进行排序的性能会差得多(无论您如何进行排序)。更不用说其他事情(比较等)也慢了。