3

我在 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

但我总是遇到麻烦!子查询是唯一的解决方案吗?

4

3 回答 3

8

这应该有效。

SELECT DISTINCT UPPER(nome)   

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

ORA-01791: not a SELECTed expression

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

ORDER BY upper(nome)

...或者您可以作弊并按位置排序...

ORDER BY 1
于 2013-03-11T14:16:57.197 回答
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...

于 2013-03-08T15:00:41.830 回答
0

试试这个

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

或者

SELECT  Upper(NOME) as NOME
FROM ICT.UTENTE group by NOME
于 2014-09-03T14:38:23.103 回答