我在Oracle 10上有这个查询:
SELECT DISTINCT NOME
FROM ICT.UTENTE
WHERE UPPER(nome) LIKE UPPER('MA%');
这样可以让我得到类似的东西:
MARIA LUISA
Mariano
MARIO
我真正想要的是以大写字母表示每一行,但我无法找到将DISTINCT
和UPPER
个关键字混合在一起的方法。我试图用以下任何一个替换第一个查询行:
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
但我总是遇到麻烦!是否是唯一的解决方案?
答案 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