問題ID : 19925

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2020-7-31 12:44
momo0727  新米   投稿数: 3
問題
>次のSQL文の実行結果として正しいものはどれですか。

 SELECT TRIM('LED' FROM UPPER(prod_name)) FROM products
 WHERE LOWER(prod_name) LIKE 'led%';

解説
TRIM関数は、引数で指定された文字列の前後にある削除文字を取り除いた文字列を返します。(中略)

削除文字には任意の1文字を指定できますが、文字列は指定できません。

とありますが、こちらをPostgreSQLで実行したところ、正常に実行できました。
解説で使用されているのは11gのようですが、12c以降でも文字列の指定はまだできないのでしょうか?

Oracleの実行環境がないため、こちらで確認できないのでOracleでは文字列指定できないようでしたらすみません。
docも見ましたが、自力では確認できませんでした。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-7-31 15:04
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
TRIM関数は、引数で指定された文字列の前後にある削除文字を取り除いた文字列を返します。(中略)

削除文字には任意の1文字を指定できますが、文字列は指定できません。

とありますが、こちらをPostgreSQLで実行したところ、正常に実行できました。
ORACLEの仕様の話をするときにPostgreSQLでできるかどうかで判断されても…

私のところで確認したらこうなりました。
# sqlplus pingt/oracle@XE

SQL*Plus: Release 11.2.0.2.0 Production on 金 7月 31 14:58:53 2020

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> select prod_name from products where lower(prod_name) like 'led%';

PROD_NAME
--------------------------------------------------
LEDライト
LED_サイクルライト
led light
ledランタン

SQL> SELECT TRIM('LED' FROM UPPER(prod_name)) FROM products WHERE LOWER(prod_name) LIKE 'led%';
SELECT TRIM('LED' FROM UPPER(prod_name)) FROM products WHERE LOWER(prod_name) LIKE 'led%'
       *
行1でエラーが発生しました。:
ORA-30001: 切捨てセットの文字は1つにする必要があります

なお、TRIM()は1文字の指定のみですが、LTRIM()/RTRIM()は文字列指定が可能です。以下のドキュメントの構文でも「set」が明記されています。
https://docs.oracle.com/cd/E16338_01/server.112/b56299/functions160.htm#sthref1482
SQL> SELECT LTRIM(UPPER(prod_name),'LED') FROM products WHERE LOWER(prod_name) LIKE 'led%';

LTRIM(UPPER(PROD_NAME),'LED')
--------------------------------------------------
ライト
_サイクルライト
 LIGHT
ランタン

ということで
引用:
Oracleの実行環境がないため、こちらで確認できないのでOracleでは文字列指定できないようでしたらすみません。
OSS-DBではPostgreSQLでもMySQLでもいいと思いますが、Oracleの学習のためにはOracle実行環境を用意することをおすすめします。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-7-31 15:05
arashi1977  長老 居住地: 広島  投稿数: 1715
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-8-5 10:16
momo0727  新米   投稿数: 3
遅くなってすみません。

ご確認とドキュメントありがとうございます。
LTRIM()/RTRIM()との違いも勉強になりました。

仰る通りOracleの実行環境をどうにかすべきですね。

不躾な質問に丁寧に答えてくださってありがとうございました。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-8-5 11:38
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
仰る通りOracleの実行環境をどうにかすべきですね。
OracleXEであれば、そんなに手間なく準備できると思いますよ!
私もOracleXE 11gと18cをLinuxマシン上にインストールしてます。rpmからインストーするだけなのですごく簡単ですよ。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-8-7 12:00
momo0727  新米   投稿数: 3
返信いただいていたの気づかずすみません。

OracleXE、恥ずかしながら知らなかったのですが、調べてみたらWindowsでもできそうです。

重ね重ねありがとうございます。これで勉強がはかどります。
質問してみてよかったです。ありがとうございました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.