【问题标题】:Alternatives to sign() in sqlite for custom order bysqlite 中 sign() 的替代方案,用于自定义订单
【发布时间】:2023-03-10 14:30:01
【问题描述】:

我有一个字符串列,其中包含一些数字字段,但很多都是 0、空字符串或 null。其余的是范围不同的数字,都是正数。

我尝试创建自定义订单。订单将由两个字段完成。首先,我想对这个数字 >0 的字段进行排序,然后按名称排序。

所以这会起作用:

select * from table
order by sign(referenceid) desc, name asc;

但 Sqlite 缺少 sign() -1/0/1 函数,而且我在 Android 上,无法创建用户定义的函数。我必须有哪些其他选择才能完成这种工作。

【问题讨论】:

    标签: sql sqlite sorting sql-order-by


    【解决方案1】:

    ifnull 函数可以将空值转换为 -1 :

    select *, ifnull(referenceid,-1) as reff 
      from table
    order by reff desc, name asc;
    

    【讨论】:

      【解决方案2】:

      过了一会儿,我想出了这个:

      SELECT * FROM table
      order by length(substr(referenceid,1,1)) desc, name asc;
      

      【讨论】:

        【解决方案3】:

        这类似于 Oracle 的 sign() 函数:

        SELECT
            mynum,
            max(min(mynum, 1), -1) sign
        FROM
        (
        SELECT 2 mynum
        UNION ALL
        SELECT NULL mynum
        UNION ALL
        SELECT 0 mynum
        UNION ALL
        SELECT -2 mynum
        );
        

        【讨论】:

          猜你喜欢
          • 2017-11-05
          • 2023-04-04
          • 2019-01-23
          • 2011-07-18
          • 2010-11-13
          • 2020-02-09
          • 1970-01-01
          • 2011-05-24
          • 2015-07-14
          相关资源
          最近更新 更多