Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sqlite中为自定义订单签名()的替代方法_Sql_Sqlite_Sorting_Sql Order By - Fatal编程技术网

在sqlite中为自定义订单签名()的替代方法

在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

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

我试图通过创建自定义订单。顺序将由两个字段完成。首先,我想对编号大于0的字段排序,然后按名称排序

所以这是可行的:

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
);