問題ID:8044について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014-5-24 23:00
pin9u  新米   投稿数: 1
解説において、

>・SELECT NVL(manager_id, 'none') FROM employees;
 は、MANAGER_ID列の値がNULLだった場合に文字列「none」に変換 しようとしていますが、MANAGER_ID列はNUMBER型の列であるため エラーとなります。

これは、暗黙的なデータデータ型変換にならないのでしょうか。

>・SELECT employee_name, NVL(yomi, 0) FROM employees;
 NVL関数の第1引数と第2引数で異なるデータ型の値が指定されて いますが、暗黙的データ変換により、第2引数の「0」が文字列へ 変換されるため、エラーになりません。

このパターンと同じように感じるのですが、考えてもどうしても理解ができませんでした。
ご教授宜しくお願い致します。



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014-5-26 11:37 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
(略)
このパターンと同じように感じるのですが、考えてもどうしても理解ができませんでした。
・'none'(文字としてのn,o,n,e)がNUMBER型(数字)の値である
・0(数字としてのゼロ、文字としてのゼロではない)が'0'(文字としてのゼロ、数字としての0ではない)である
と判断するのが同じでしょうか?

逆に、
・noneという文字がどのようなNUMBER型の値になると思いますか?
・手で書いた0は文字、数字どちらでも認識できる
というところを意識していただければわかりやすいかと思います。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014-5-26 12:13
arashi1977  長老 居住地: 広島  投稿数: 1715
ちょっと深い話をすると…

■文字と数字
コンピュータの中では、文字と数字は扱いが違います。
C言語を例にしますが、数字を格納するための型、文字を格納する型というのは明確に違っています。
同じ2バイトのメモリ領域(変数)の中に「05」を格納したとして
数字型(int) :0x0005 = 5
文字型(char):0x3035 = 05
という情報が格納されます。

■型変換
上記の例を使うと、こういうことがおきます。
(char)0x3035 =数値に変換> (int)0x0005 = 5
(int)0x0005 =文字に変換> (char)0x0035 = 5

■設問のパターン
では上記を踏まえて、設問のやつ
・「(char)'none' = 0x6e6f6e65(none)」を数値に変換するとどうなるでしょうか?
・「(int)0 = 0x0000」を文字に変換するとどうなるでしょうか?

※理解の助けのために厳密には正しくない部分がありますが、そこはお察しください

  >フォーラム検索へ


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