Oracle:在SQL Query中对第二个单词排序列表?

时间:2017-09-15 06:00:22

标签: sql oracle sorting oracle11g

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

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

名称用于示例:

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;

任何人都可以指导什么错误。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

以下查询解释得更好..

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;

答案 2 :(得分:0)

按员工订单选择display_name by substr(upper(display_name),instr(upper(display_name),'',1));

答案 3 :(得分:0)

使用regexp_replace:

清理所有嵌套的instr / substr内容
order by regexp_replace(NAME, '.* (\w)', '\1'), NAME;  

正则表达式匹配并记住最后一个""在空格之后,然后按顺序排序。