首页 > 解决方案 > 'ORA-00904: "RIGHT": invalid identifier' Oracle 查询错误

问题描述

从 STATION 查询以元音(即 a、e、i、o 和 u)作为首尾字符的城市名称列表。您的结果不能包含重复项。

站台表如下:

站台

当我写这个查询

SELECT DISTINCT CITY 
FROM STATION 
WHERE (LEFT(CITY,1) IN ('A','E','I','O','U')) AND (RIGHT(CITY,1) IN ('A','E','I','O','U'));**

我收到一个错误:

ORA-00904: "RIGHT": 无效标识符

标签: sqloracle

解决方案


left()并且right()不是甲骨文中的东西。相反,您可以使用substr(). 您可以传递一个负的起始索引来获取最后一个字符:

select city 
from station 
where substr(city, 1, 1) in ('a','e','i','o','u') 
  and substr(city, -1) in ('a','e','i','o','u')

我不确定您是否真的需要distinct这里,所以我将其删除 - 如果出于某种原因需要,您可以将其放回去。

也可以用正则表达式来表达它;这使得代码更短,但很可能比简单的字符串函数效率低:

where regexp_like(city, '^[aeiou].*[aeiou]$'

请注意,这与其他解决方案并不完全相同,因为它需要字符串中至少有两个字符(而第一个查询很乐意允许一个名为 的城市'a'


推荐阅读