首页 > 解决方案 > 数组中空白元素的Rails顺序

问题描述

假设以下数组:

["Palm nova", "", "Palm trad", "Palm discard", nil, "Palm actual"]  

目标是提取列表的第一项,即不是空白""nil

rails where 子句允许根据一个或多个属性对结果进行asc排序 desc。但是当使用 Postgresql 作为数据库时,空白项放在哪里呢?

""nil待遇一样吗?

标签: ruby-on-railspostgresql

解决方案


根据定义,空字符串通过将它们与<and>运算符进行比较来排序,如文档中所述:

...升序将较小的值放在首位,其中“较小”是根据 < 运算符定义的。同样,降序由 > 运算符确定

“” 和 nil 是否被同等对待?:不。同样,来自文档“默认情况下,空值排序好像大于任何非空值”,所以如果你按DESC你的 NULL 值排序,如果使用ASC它们将在最后。

基本上你可以做三件事;

  • 或者修改您的查询以在过滤时省略 NULL 和/或空字符串(如果可能),
  • 或操作生成的数组以过滤掉 nil 和/或空字符串,
  • 或者在查询中添加 ORDER BY 子句以确保 NULL 和/或空字符串在结果中始终具有已识别的顺序。

推荐阅读