問題ID:8044について
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
問題ID:8044について
msg# 1
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」が文字列へ 変換されるため、エラーになりません。
このパターンと同じように感じるのですが、考えてもどうしても理解ができませんでした。
ご教授宜しくお願い致します。
>・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」が文字列へ 変換されるため、エラーになりません。
このパターンと同じように感じるのですが、考えてもどうしても理解ができませんでした。
ご教授宜しくお願い致します。
Re: 問題ID:8044について
msg# 1.1
arashi1977
居住地: 広島
投稿数: 1715
引用:・'none'(文字としてのn,o,n,e)がNUMBER型(数字)の値である
・0(数字としてのゼロ、文字としてのゼロではない)が'0'(文字としてのゼロ、数字としての0ではない)である
と判断するのが同じでしょうか?
逆に、
・noneという文字がどのようなNUMBER型の値になると思いますか?
・手で書いた0は文字、数字どちらでも認識できる
というところを意識していただければわかりやすいかと思います。
(略)
このパターンと同じように感じるのですが、考えてもどうしても理解ができませんでした。
・0(数字としてのゼロ、文字としてのゼロではない)が'0'(文字としてのゼロ、数字としての0ではない)である
と判断するのが同じでしょうか?
逆に、
・noneという文字がどのようなNUMBER型の値になると思いますか?
・手で書いた0は文字、数字どちらでも認識できる
というところを意識していただければわかりやすいかと思います。
Re: 問題ID:8044について
msg# 1.1.1
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」を文字に変換するとどうなるでしょうか?
※理解の助けのために厳密には正しくない部分がありますが、そこはお察しください
■文字と数字
コンピュータの中では、文字と数字は扱いが違います。
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」を文字に変換するとどうなるでしょうか?
※理解の助けのために厳密には正しくない部分がありますが、そこはお察しください