3

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

しかし、私はいつもトラブルを抱えていました!サブクエリが唯一の解決策ですか?

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 の組み合わせをサポートしていない場合 (これは非常に奇妙です)、次のように DISTINCT の代わりに GROUP BY を使用してみてください。

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 に答える