問題ID : 19925
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
問題ID : 19925
msg# 1
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も見ましたが、自力では確認できませんでした。
>次のSQL文の実行結果として正しいものはどれですか。
SELECT TRIM('LED' FROM UPPER(prod_name)) FROM products
WHERE LOWER(prod_name) LIKE 'led%';
解説
TRIM関数は、引数で指定された文字列の前後にある削除文字を取り除いた文字列を返します。(中略)
削除文字には任意の1文字を指定できますが、文字列は指定できません。
とありますが、こちらをPostgreSQLで実行したところ、正常に実行できました。
解説で使用されているのは11gのようですが、12c以降でも文字列の指定はまだできないのでしょうか?
Oracleの実行環境がないため、こちらで確認できないのでOracleでは文字列指定できないようでしたらすみません。
docも見ましたが、自力では確認できませんでした。
Re: 問題ID : 19925
msg# 1.1
arashi1977
居住地: 広島
投稿数: 1715
引用:ORACLEの仕様の話をするときにPostgreSQLでできるかどうかで判断されても…
私のところで確認したらこうなりました。
なお、TRIM()は1文字の指定のみですが、LTRIM()/RTRIM()は文字列指定が可能です。以下のドキュメントの構文でも「set」が明記されています。
https://docs.oracle.com/cd/E16338_01/server.112/b56299/functions160.htm#sthref1482
ということで
引用:OSS-DBではPostgreSQLでもMySQLでもいいと思いますが、Oracleの学習のためにはOracle実行環境を用意することをおすすめします。
TRIM関数は、引数で指定された文字列の前後にある削除文字を取り除いた文字列を返します。(中略)
削除文字には任意の1文字を指定できますが、文字列は指定できません。
とありますが、こちらを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では文字列指定できないようでしたらすみません。
Re: 問題ID : 19925
msg# 1.1.1
arashi1977
居住地: 広島
投稿数: 1715
ちなみに 12c のドキュメントでも同じことが書いてあります。
https://docs.oracle.com/cd/E57425_01/121/SQLRF/functions235.htm#i79689
https://docs.oracle.com/cd/E57425_01/121/SQLRF/functions108.htm#i77875
https://docs.oracle.com/cd/E57425_01/121/SQLRF/functions235.htm#i79689
https://docs.oracle.com/cd/E57425_01/121/SQLRF/functions108.htm#i77875
Re: 問題ID : 19925
msg# 1.2
momo0727
投稿数: 3
遅くなってすみません。
ご確認とドキュメントありがとうございます。
LTRIM()/RTRIM()との違いも勉強になりました。
仰る通りOracleの実行環境をどうにかすべきですね。
不躾な質問に丁寧に答えてくださってありがとうございました。
ご確認とドキュメントありがとうございます。
LTRIM()/RTRIM()との違いも勉強になりました。
仰る通りOracleの実行環境をどうにかすべきですね。
不躾な質問に丁寧に答えてくださってありがとうございました。
Re: 問題ID : 19925
msg# 1.2.1
arashi1977
居住地: 広島
投稿数: 1715
引用:OracleXEであれば、そんなに手間なく準備できると思いますよ!
私もOracleXE 11gと18cをLinuxマシン上にインストールしてます。rpmからインストーするだけなのですごく簡単ですよ。
仰る通りOracleの実行環境をどうにかすべきですね。
私もOracleXE 11gと18cをLinuxマシン上にインストールしてます。rpmからインストーするだけなのですごく簡単ですよ。
Re: 問題ID : 19925
msg# 1.3
momo0727
投稿数: 3
返信いただいていたの気づかずすみません。
OracleXE、恥ずかしながら知らなかったのですが、調べてみたらWindowsでもできそうです。
重ね重ねありがとうございます。これで勉強がはかどります。
質問してみてよかったです。ありがとうございました。
OracleXE、恥ずかしながら知らなかったのですが、調べてみたらWindowsでもできそうです。
重ね重ねありがとうございます。これで勉強がはかどります。
質問してみてよかったです。ありがとうございました。