質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

3回答

4662閲覧

trim関数、to_char関数、to_numeric関数、decode関数等を合わせた使い方

kei_pgm

総合スコア8

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2015/11/01 13:41

・trim(to_char(to_numeric(a)-100,'9999'))

・decode(substr(a,5,2),'01',concat(substr((to_numeric(a)-200),1,4),'0')

この2つの文が何をしようとしているのかを教えてください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

関数の括弧の内側から読んでいけば分かりますよ!

・to_numericはOracleに該当なし。to_numberの間違い?
to_number: 数値へ
数値用の書式モデル: '9999'の書式
to_char: 数値から文字列に変換
trim: 双方向文字サプレス
substr: 部分文字列取得
concat: 文字列結合演算子の関数版
decode: 条件つき置換

投稿2015/11/01 14:15

編集2015/11/01 14:19
shiena

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Oracleに[to_numeric]という関数はありませんので、
文字列を数値に変換する[to_number]と置き換えて考えます。

1つ目の式

trim(to_char(to_numeric(a)-100,'9999'))

例えば変数aに入る値が1188の場合は100を引いてから、
'9999'の書式を適用するので結果は**[1088]**になります。

2つ目の式

decode(substr(a,5,2),'01',concat(substr((to_numeric(a)-200),1,4),'0')

このまま実行すると「右カッコがありません。」のエラーが出るのですが、
最後の部分のカッコが抜けているのではないでしょうか?
'0') → '0'))
この式の結果は変数aに入る値が123401の場合は、
substr関数で5文字目から2文字目を取得した結果が'01'なので、
concat以下の関数が実行されて元の値123401から200が引かれて123201、
この文字を1から4文字目まで取得して1232、これに'0'を結合した結果
**[12320]**となります。
変数aに入る値の5文字目から2文字取得した結果が'01'以外の場合は、
すべてNullが返ります。

1つ目は運送業の配達物を直接持ち込んだ場合の100円割引の場合の計算式、
2つ目は5文字目から2文字が何らかのフラグ?ステータス?になっていて、
フラグがON('01')の場合は1~4桁の数字から200を引くような処理のように見えます。

差し支えなければこの式が使用されるケースを教えていただけますか?
例えば配送運賃計算、金融系、ショッピング系など。

「何をしようとしているのか」

の回答が思いつくかもしれません。

投稿2015/11/22 02:58

nabe3

総合スコア345

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

すでに shienaさんからコメントが付いていますが、Oracleの日本語マニュアルは以下に無料で公開されています。
http://www.oracle.com/technetwork/jp/indexes/documentation/index.html

該当バージョンの「SQL言語リファレンス」にお探しの内容が載っています。Database 12c Release 1 なら
http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/index.html
から[View Library]
左の[ブック]で該当バージョンの全マニュアル
http://docs.oracle.com/cd/E57425_01/121/nav/portal_booklist.htm
を表示するので「SQL言語リファレンス」で
http://docs.oracle.com/cd/E57425_01/121/SQLRF/toc.htm
が表示されます。

10年ちょっと前まで1セット30万円もする紙のマニュアルしかなかったのに、今ではhtmlやpdfのマニュアルが無料です。便利になったものです。

ついでに、無料で使用期限のないOracle Database Express Edition(以下 XE, Standard Editon相当)が
いまのところOracle11.2.0版のみ
http://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/overview/index.html
で公開されています。Oracle SQLの入門の勉強にはこれで十分でしょう。

システム要件は Windowsでしたら
http://docs.oracle.com/cd/E36055_01/install.112/b66470/toc.htm#BABHICJH
の環境を用意してください。

XEはサポート契約はないので、Oracle社カスタマ・サポート・センターへの問い合わせや、パッチの提供はありませんので、XEの商用利用はおすすめできません。

投稿2015/11/02 00:13

編集2015/11/02 02:12
Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問