Oracle:在SQL查询的第二个单词上排序列表?

sql oracle sorting oracle11g

105 观看

4回复

2275 作者的声誉

在Oracle中,如何Name使用第二个单词对例如SQL中的值进行排序。在我看来有些棘手。例如:如果在表中,我的名字如下:

我有一个要根据名称排序的对象列表。我已经完成了编码,但它确实根据名称进行了排序,但是我有一点不同的要求。

名称例如:

Bull AMP
Cat DEF
Dog AMP
Frog STR
Zebra DEF

我希望列表为:

Bull AMP
Dog AMP
Cat DEF
Zebra DEF
Frog STR

按第二个单词排序。

我尝试了以下查询,但似乎没有用。

SELECT NAME, 
  SUBSTR(NAME, INSTR(' ',NAME), 
  LENGTH(NAME) - INSTR(' ',NAME) +2) AS word2
FROM animal_master
ORDER BY SUBSTR(NAME,INSTR(' ',NAME), LENGTH(NAME) - INSTR(' ',NAME) +2) asc;

任何人都可以指导怎么了。

作者: sTg 的来源 发布者: 2017 年 9 月 15 日

回应 4


2

112 作者的声誉

决定

您的INSTR函数具有最前面的参数,因此这就是为什么您得到错误结果的原因。我建议使用以下内容:

SELECT NAME
FROM animal_master
ORDER BY SUBSTR(NAME,INSTR(NAME, ' ')) asc;

SUBSTR(NAME,INSTR(NAME,''))仅返回第二个单词,而您按该第二个单词排序。如果您还想按第一个单词排序,那么第二个单词可以执行以下操作:

ORDER BY SUBSTR(NAME,INSTR(NAME, ' ')), NAME
作者: Ucello 发布者: 2017 年 9 月 15 日

0

322 作者的声誉

请尝试以下方法。

SELECT NAME
FROM animal_master
ORDER BY TRIM(SUBSTR(NAME, (INSTR(NAME, ' ', 1, 1) + 1), (INSTR(NAME, ' ', 1, 2) - INSTR(NAME, ' ', 1, 1) - 1))) asc;

下面的查询说明更好。

SELECT NAME
    FROM (
        SELECT 
            NAME,
            (INSTR(NAME, ' ', 1, 1) + 1) first_occurrence_of_space,
            (INSTR(NAME, ' ', 1, 2) - INSTR(NAME, ' ', 1, 1) - 1) second_occurrence_of_space
    FROM animal_master)
ORDER BY TRIM(SUBSTR(NAME, first_occurrence_of_space, second_occurrence_of_space)) asc;
作者: Damith 发布者: 2017 年 9 月 15 日

0

22 作者的声誉

通过substr(upper(display_name),instr(upper(display_name),'',1))从员工订单中选择display_name;

作者: balaiah 发布者: 2017 年 9 月 15 日

1

7463 作者的声誉

使用regexp_replace清理所有嵌套的instr / substr内容:

order by regexp_replace(NAME, '.* (\w)', '\1'), NAME;  

正则表达式匹配并记住空格后的最后一个“单词”,然后按该顺序排序。

作者: Gary_W 发布者: 2017 年 9 月 15 日
32x32