在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;
任何人都可以指导什么错误。
答案 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;
正则表达式匹配并记住最后一个""在空格之后,然后按顺序排序。