2017-09-15 172 views
2

在Oracle中,我如何使用SQL的第二个字为SQL中的例如:Name排序值。看起来有点棘手。例如:如果在一个表中,我的名字如下:Oracle:对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; 

任何人都可以请指导什么是错的。

回答

2

您的INSTR函数有回到前面的参数,所以这就是为什么你得到不正确的结果。我会建议使用下列内容:

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

的SUBSTR(NAME,INSTR(NAME,'“))只返回第二个字,你的第二个字订购。如果您还想按第一个顺序排列,则可以使用第二个词来执行下列操作:

ORDER BY SUBSTR(NAME,INSTR(NAME, ' ')), NAME 
+0

这个答案好多了。但是,要删除第一个空格,我们将使用trim,所以,ORDER BY SUBSTR(NAME,INSTR(NAME,''))asc;会做的伎俩。 – Damith

0

请尝试以下操作。

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; 

下面查询解释更好..从雇员为了通过SUBSTR

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

选择DISPLAY_NAME(上部(DISPLAY_NAME),INSTR(上(DISPLAY_NAME),””,1));

0

清理所有嵌套INSTR/SUBSTR东西与REGEXP_REPLACE:

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

正则表达式匹配并记住的空间后最后一个“字”,然后由第一笔订单。

相关问题