如何对 SQLite 数据库中的字符串值中的字符进行排序? 例如:
"macedonia" --sorted--> "aacdeimno"?
我知道一种方法:如果我使用另一个表:integers(i int) (1,2,3,4,,,,,100) 并进行以下查询:
SELECT group_concat(l ,'' )
FROM
( SELECT substr('macedonia',i,1) as l
from integers
where i BETWEEN 1 and length('macedonia')
ORDER BY l
)
-- 排序作品! --> '马其顿'---> 'aacdeimno'
但是如果我在其他复杂查询中使用它,这个方法就太复杂了! 如何传递字符串“macedonia”作为查询的参数?在 MS Access 中,有所谓的参数查询...
你知道更简单的事情吗?也许使用 CTE 或 REGEXP ? 对于 PostgreSQL 数据库,我编写了自己的函数 psrt() 来对 PL/pgSQL 语言中的字符串进行排序。 SQLite有这样的SORTING功能吗?
也许考虑以下基于递归 CTE 的示例:-
DROP TABLE IF EXISTS demo;
CREATE TABLE IF NOT EXISTS demo (s TEXT);
/* Load some test data */
INSERT INTO demo VALUES
(''),('macedonia'),('blah'),('rumplestiltskin'),('something'),(100),(null);
/* Show loaded data */
SELECT rowid,* FROM demo;
/* The reordering via CTEs */
WITH cte1(r,current,rest) AS (
SELECT rowid,substr(s,1,1), substr(s,2) FROM demo
UNION ALL
SELECT r,substr(rest,1,1),substr(rest,2)
FROM cte1
WHERE length(rest) > 0
LIMIT 50
),
cte2 AS (SELECT * FROM cte1 ORDER BY r,current)
SELECT r,group_concat(current,'') FROM cte2 GROUP BY r
;
/* Cleanup demo environment */
DROP TABLE IF EXISTS demo;
输出:-
WITHOUT ROWID
表,但可以进行调整以利用主键。