订购由 Space 分隔的字符串列
Order a String column separated by Space
名为 ASORT
的 table 具有以下定义和插入(按指定顺序):
CREATE TABLE asort(a NUMBER, b VARCHAR2(5));
INSERT INTO asort VALUES(1, '1 11');
INSERT INTO asort VALUES(2, '11');
INSERT INTO asort VALUES(3, '1 10');
INSERT INTO asort VALUES(4, '1 3');
INSERT INTO asort VALUES(5, '1 5');
INSERT INTO asort VALUES(6, '1 20');
INSERT INTO asort VALUES(7, '1 14');
INSERT INTO asort VALUES(8, '1');
SELECT *
FROM asort
ORDER BY b; -- returns the below result
但所需的顺序是 space 之后的所有数字也应如下所示排序。
请提出查询以获得所需结果。
谢谢..!!
您可以使用 regexp_substr()
从定界列表中提取第 n 个元素。然后,您可以将这些值转换为数字并按此排序。类似于:
ORDER BY cast(replace(regexp_substr(b||' ', '[0-9]+ ', 1, 1), ' ', '') as int) NULLS FIRST,
cast(replace(regexp_substr(b||' ', '[0-9]+ ', 1, 2), ' ', '') as int)
Here 是 SQL Fiddle.
名为 ASORT
的 table 具有以下定义和插入(按指定顺序):
CREATE TABLE asort(a NUMBER, b VARCHAR2(5));
INSERT INTO asort VALUES(1, '1 11');
INSERT INTO asort VALUES(2, '11');
INSERT INTO asort VALUES(3, '1 10');
INSERT INTO asort VALUES(4, '1 3');
INSERT INTO asort VALUES(5, '1 5');
INSERT INTO asort VALUES(6, '1 20');
INSERT INTO asort VALUES(7, '1 14');
INSERT INTO asort VALUES(8, '1');
SELECT *
FROM asort
ORDER BY b; -- returns the below result
但所需的顺序是 space 之后的所有数字也应如下所示排序。
请提出查询以获得所需结果。
谢谢..!!
您可以使用 regexp_substr()
从定界列表中提取第 n 个元素。然后,您可以将这些值转换为数字并按此排序。类似于:
ORDER BY cast(replace(regexp_substr(b||' ', '[0-9]+ ', 1, 1), ' ', '') as int) NULLS FIRST,
cast(replace(regexp_substr(b||' ', '[0-9]+ ', 1, 2), ' ', '') as int)
Here 是 SQL Fiddle.