在sqlite中为自定义订单签名()的替代方法
我有一个字符串列,其中包含一些数字字段,但很多是0、空字符串或null。其余的是不同范围的数字,都是正数 我试图通过创建自定义订单。顺序将由两个字段完成。首先,我想对编号大于0的字段排序,然后按名称排序 所以这是可行的:在sqlite中为自定义订单签名()的替代方法,sql,sqlite,sorting,sql-order-by,Sql,Sqlite,Sorting,Sql Order By,我有一个字符串列,其中包含一些数字字段,但很多是0、空字符串或null。其余的是不同范围的数字,都是正数 我试图通过创建自定义订单。顺序将由两个字段完成。首先,我想对编号大于0的字段排序,然后按名称排序 所以这是可行的: select * from table order by sign(referenceid) desc, name asc; 但是Sqlite缺少sign()-1/0/1函数,我在Android上,无法创建用户定义的函数。完成此排序还需要哪些其他选项。ifnull函数可以将n
select * from table
order by sign(referenceid) desc, name asc;
但是Sqlite缺少sign()-1/0/1函数,我在Android上,无法创建用户定义的函数。完成此排序还需要哪些其他选项。ifnull函数可以将null转换为-1:
select *, ifnull(referenceid,-1) as reff
from table
order by reff desc, name asc;
过了一段时间,我终于想出了一个办法:
SELECT * FROM table
order by length(substr(referenceid,1,1)) desc, name asc;
这与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
);