将DISTINCT和UPPER关键字混合在一起

时间:2013-03-08 14:46:12

标签: sql oracle select distinct uppercase

我在Oracle 10上有这个查询:

SELECT DISTINCT NOME
FROM ICT.UTENTE
WHERE UPPER(nome) LIKE UPPER('MA%');

这样可以让我得到类似的东西:

MARIA LUISA
Mariano
MARIO

我真正想要的是以大写字母表示每一行,但我无法找到将DISTINCTUPPER个关键字混合在一起的方法。我试图用以下任何一个替换第一个查询行:

SELECT DISTINCT UPPER(nome)   -- not a SELECTed expression
SELECT UPPER (DISTINCT nome)  -- missing expression
SELECT DISTINCT UPPER nome    -- upper: invalid identifier
SELECT UPPER DISTINCT nome    -- FROM keyword not found where expected

但我总是遇到麻烦!是否是唯一的解决方案?

3 个答案:

答案 0 :(得分:5)

这应该有效。

SELECT DISTINCT UPPER(nome)   

确实它确实有效。如果您收到此错误...

ORA-01791: not a SELECTed expression

...那么你还没有发布整个查询。具体来说,您没有向我们展示ORDER BY子句。使用DISTINCT,ORDER BY子句中的属性必须与投影匹配。所以要么你需要......

ORDER BY upper(nome)

......或者你可以按位置作弊和排序......

ORDER BY 1

答案 1 :(得分:0)

如果您的DBMS确实不支持DISTINCT和UPPER的混合(这会非常奇怪),您可以尝试使用GROUP BY而不是DISTINCT,如下所示:

SELECT UPPER(NOME)
FROM ICT.UTENTE
WHERE UPPER(nome) LIKE UPPER('MA%')
GROUP BY UPPER(NOME);

如果您的DBMS的LIKE实现区分大小写,则可能还有一个名为“ILIKE”的不区分大小写的运算符变体,可以在WHERE子句中使用UPPER代替LIKE:

SELECT UPPER(NOME)
FROM ICT.UTENTE
WHERE nome ILIKE 'MA%'
GROUP BY UPPER(NOME);

这取决于您使用的DBMS ......

答案 2 :(得分:0)

试试这个

SELECT DISTINCT Upper(NOME) as NOME
FROM ICT.UTENTE

OR

SELECT  Upper(NOME) as NOME
FROM ICT.UTENTE group by NOME
相关问题