teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

11

2019/07/31 13:36

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -18,8 +18,8 @@
18
18
 
19
19
  D. select lpad(substr(prodcd, instr(prodcd, '-')), length(prodcd), 'x') from product
20
20
 
21
- で、正解はDなのはわかるのですが、
21
+ で、**正解はDなのはわかるのですが、
22
- 解説の一部が理解できません。
22
+ 解説の一部が理解できません。**
23
23
 
24
24
  黒本の解説
25
25
  ---------------------

10

2019/07/31 13:36

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  ③rpadを使っていますが、rpadは右に埋め込むので誤りです。同様に、選択肢Bも誤りです。左に埋め込むlpadが正しいので、選択肢Cを調べます。
38
38
 
39
- ④「lpad(文字列, n [,文字])」は、文字列の左側に「文字」を埋め込んで長さ「n」にして戻します。選択肢Cの第2引数(戻す長さ)は、②で抜き出した文字列の長さから1を引いた値になっています。したがって、選択肢Cでは、埋め込まず逆に最後の1文字を切り捨てて戻します。このため、選択肢Cは誤りです。戻す長さは元の部品コード番号の長さなので、選択肢Dの「length(prodcd)」が正解です。
39
+ ④「lpad(文字列, n [,文字])」は、文字列の左側に「文字」を埋め込んで長さ「n」にして戻します。**選択肢Cの第2引数(戻す長さ)は、②で抜き出した文字列の長さから1を引いた値になっています。**したがって、選択肢Cでは、埋め込まず逆に最後の1文字を切り捨てて戻します。このため、選択肢Cは誤りです。戻す長さは元の部品コード番号の長さなので、選択肢Dの「length(prodcd)」が正解です。
40
40
 
41
41
  ---------------------
42
42
 

9

2019/07/31 13:31

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -58,6 +58,6 @@
58
58
  というのなら、理解できます。
59
59
 
60
60
 
61
- 正解はDということは納得いきますが、あくまで納得できないのは、解説の「選択肢Cの第2引数は、②で抜き出した文字列の長さから1を引いた値」の一文と、その直後の「戻す長さは元の部品コード番号の長さなので、選択肢Dの「length(prodcd)」が正解」の一文が矛盾していることです。
61
+ **正解はDということは納得いきますが、あくまで納得できないのは、解説の「選択肢Cの第2引数は、②で抜き出した文字列の長さから1を引いた値」の一文と、その直後の「戻す長さは元の部品コード番号の長さなので、選択肢Dの「length(prodcd)」が正解」の一文が矛盾していることです。**
62
62
 
63
63
  ご意見お願いいたします。

8

2019/07/31 12:43

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -44,7 +44,7 @@
44
44
  とあるのですが、
45
45
  選択肢AとBは、rpadなので違うことは、わかります。
46
46
  選択肢Cの第2引数は、
47
- ②で抜き出した文字列の長さ(-Cc01-001 だから9文字)から1(instra(prodcd, '-')だから、-Cc01-001の1文字目)を引いた値=8 となり、xで埋める前にすでに -Cc01-001 の9文字あるため、お尻の1文字を切り捨てて戻す、というのも理解できる。
47
+ ②で抜き出した文字列の長さ(-Cc01-001 だから9文字)から1(instr(prodcd, '-')だから、-Cc01-001の1文字目)を引いた値=8 となり、xで埋める前にすでに -Cc01-001 の9文字あるため、お尻の1文字を切り捨てて戻す、というのも理解できる。
48
48
  だけど、選択肢Dの第2引数も、②で抜き出した文字列の長さ(-Cc01-001 だから9文字)になるから、解説の最後の、「戻す長さは元の部品コード番号の長さなので」というのが、理解できません。
49
49
  それとも、選択肢Cの第2引数の理解が間違ってるのか。。。
50
50
  **選択肢Cの第2引数は、
@@ -58,6 +58,6 @@
58
58
  というのなら、理解できます。
59
59
 
60
60
 
61
- 正解はDということは納得いきますが、あくまで疑問なのは、解説の「選択肢Cの第2引数は、②で抜き出した文字列の長さから1を引いた値」の一文です。
61
+ 正解はDということは納得いきますが、あくまで納得できのは、解説の「選択肢Cの第2引数は、②で抜き出した文字列の長さから1を引いた値」の一文と、その直後の「戻す長さは元の部品コード番号の長さなの、選択肢Dの「length(prodcd)」が正解」の一文が矛盾していることです。
62
62
 
63
63
  ご意見お願いいたします。

7

2019/07/31 12:39

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -47,9 +47,9 @@
47
47
  ②で抜き出した文字列の長さ(-Cc01-001 だから9文字)から1(instra(prodcd, '-')だから、-Cc01-001の1文字目)を引いた値=8 となり、xで埋める前にすでに -Cc01-001 の9文字あるため、お尻の1文字を切り捨てて戻す、というのも理解できる。
48
48
  だけど、選択肢Dの第2引数も、②で抜き出した文字列の長さ(-Cc01-001 だから9文字)になるから、解説の最後の、「戻す長さは元の部品コード番号の長さなので」というのが、理解できません。
49
49
  それとも、選択肢Cの第2引数の理解が間違ってるのか。。。
50
- 選択肢Cの第2引数は、
50
+ **選択肢Cの第2引数は、
51
51
  ②で抜き出した文字列の長さから1を引いた値
52
- というのが誤植な気がします。
52
+ というのが誤植な気がします。**
53
53
  選択肢Cの第2引数は、
54
54
  length(prodcd) - instr(prodcd, '-')
55
55
  で、prodcdは、A1-Cc01-001だから、

6

2019/07/31 12:31

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -37,6 +37,7 @@
37
37
  ③rpadを使っていますが、rpadは右に埋め込むので誤りです。同様に、選択肢Bも誤りです。左に埋め込むlpadが正しいので、選択肢Cを調べます。
38
38
 
39
39
  ④「lpad(文字列, n [,文字])」は、文字列の左側に「文字」を埋め込んで長さ「n」にして戻します。選択肢Cの第2引数(戻す長さ)は、②で抜き出した文字列の長さから1を引いた値になっています。したがって、選択肢Cでは、埋め込まず逆に最後の1文字を切り捨てて戻します。このため、選択肢Cは誤りです。戻す長さは元の部品コード番号の長さなので、選択肢Dの「length(prodcd)」が正解です。
40
+
40
41
  ---------------------
41
42
 
42
43
 

5

2019/07/31 12:29

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -21,7 +21,8 @@
21
21
  で、正解はDなのはわかるのですが、
22
22
  解説の一部が理解できません。
23
23
 
24
- 解説は、
24
+ 黒本の解説
25
+ ---------------------
25
26
  文字関数(特にINSTR、LPAD、SUBSTR)に関する問題です。
26
27
  まず、選択肢Aを調べます。ネストの内側から外側に関数を評価していきます。
27
28
 
@@ -36,6 +37,7 @@
36
37
  ③rpadを使っていますが、rpadは右に埋め込むので誤りです。同様に、選択肢Bも誤りです。左に埋め込むlpadが正しいので、選択肢Cを調べます。
37
38
 
38
39
  ④「lpad(文字列, n [,文字])」は、文字列の左側に「文字」を埋め込んで長さ「n」にして戻します。選択肢Cの第2引数(戻す長さ)は、②で抜き出した文字列の長さから1を引いた値になっています。したがって、選択肢Cでは、埋め込まず逆に最後の1文字を切り捨てて戻します。このため、選択肢Cは誤りです。戻す長さは元の部品コード番号の長さなので、選択肢Dの「length(prodcd)」が正解です。
40
+ ---------------------
39
41
 
40
42
 
41
43
  とあるのですが、

4

2019/07/31 12:27

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -39,7 +39,7 @@
39
39
 
40
40
 
41
41
  とあるのですが、
42
- AとBは、rpadなので違うことは、わかります。
42
+ 選択肢AとBは、rpadなので違うことは、わかります。
43
43
  選択肢Cの第2引数は、
44
44
  ②で抜き出した文字列の長さ(-Cc01-001 だから9文字)から1(instra(prodcd, '-')だから、-Cc01-001の1文字目)を引いた値=8 となり、xで埋める前にすでに -Cc01-001 の9文字あるため、お尻の1文字を切り捨てて戻す、というのも理解できる。
45
45
  だけど、選択肢Dの第2引数も、②で抜き出した文字列の長さ(-Cc01-001 だから9文字)になるから、解説の最後の、「戻す長さは元の部品コード番号の長さなので」というのが、理解できません。

3

2019/07/31 12:26

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -55,4 +55,6 @@
55
55
  というのなら、理解できます。
56
56
 
57
57
 
58
+ 正解はDということは納得いきますが、あくまで疑問なのは、解説の「選択肢Cの第2引数は、②で抜き出した文字列の長さから1を引いた値」の一文です。
59
+
58
60
  ご意見お願いいたします。

2

2019/07/31 12:20

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -12,4 +12,47 @@
12
12
 
13
13
  A. select rpad(substr(prodcm, instr(prodcd, '-')), length(prodcd) - instr(prodcd, '-'), 'x') from product
14
14
 
15
- B. select
15
+ B. select rpad(substr(prodcd, instr(prodcm, '-')), length(prodcd), 'x') from product
16
+
17
+ C. select lpad(substr(prodcd, instr(prodcd, '-')), length(prodcd) - instr(prodcd, '-'), 'x') from product
18
+
19
+ D. select lpad(substr(prodcd, instr(prodcd, '-')), length(prodcd), 'x') from product
20
+
21
+ で、正解はDなのはわかるのですが、
22
+ 解説の一部が理解できません。
23
+
24
+ 解説は、
25
+ 文字関数(特にINSTR、LPAD、SUBSTR)に関する問題です。
26
+ まず、選択肢Aを調べます。ネストの内側から外側に関数を評価していきます。
27
+
28
+ ①instr(prodcd, '-')
29
+ 部品コード番号の最初のハイフン「-」の位置を調べています。
30
+ 〈例: A1-Cc01-001〉instr(prodcd, '-')→3
31
+
32
+ ②substr(prodcd, instr(prodcd, '-'))
33
+ 部品コード番号の3文字目(最初のハイフン)以降の文字列を抜き出します。
34
+ 〈例: A1-Cc01-001〉substr(prodcd, instr(prodcd, '-')) → -Cc01-001
35
+
36
+ ③rpadを使っていますが、rpadは右に埋め込むので誤りです。同様に、選択肢Bも誤りです。左に埋め込むlpadが正しいので、選択肢Cを調べます。
37
+
38
+ ④「lpad(文字列, n [,文字])」は、文字列の左側に「文字」を埋め込んで長さ「n」にして戻します。選択肢Cの第2引数(戻す長さ)は、②で抜き出した文字列の長さから1を引いた値になっています。したがって、選択肢Cでは、埋め込まず逆に最後の1文字を切り捨てて戻します。このため、選択肢Cは誤りです。戻す長さは元の部品コード番号の長さなので、選択肢Dの「length(prodcd)」が正解です。
39
+
40
+
41
+ とあるのですが、
42
+ AとBは、rpadなので違うことは、わかります。
43
+ 選択肢Cの第2引数は、
44
+ ②で抜き出した文字列の長さ(-Cc01-001 だから9文字)から1(instra(prodcd, '-')だから、-Cc01-001の1文字目)を引いた値=8 となり、xで埋める前にすでに -Cc01-001 の9文字あるため、お尻の1文字を切り捨てて戻す、というのも理解できる。
45
+ だけど、選択肢Dの第2引数も、②で抜き出した文字列の長さ(-Cc01-001 だから9文字)になるから、解説の最後の、「戻す長さは元の部品コード番号の長さなので」というのが、理解できません。
46
+ それとも、選択肢Cの第2引数の理解が間違ってるのか。。。
47
+ 選択肢Cの第2引数は、
48
+ ②で抜き出した文字列の長さから1を引いた値
49
+ というのが誤植な気がします。
50
+ 選択肢Cの第2引数は、
51
+ length(prodcd) - instr(prodcd, '-')
52
+ で、prodcdは、A1-Cc01-001だから、
53
+ length(prodcd) - instr(prodcd, '-')=
54
+ 11-3=8
55
+ というのなら、理解できます。
56
+
57
+
58
+ ご意見お願いいたします。

1

2019/07/31 10:17

投稿

reirei0724
reirei0724

スコア6

title CHANGED
File without changes
body CHANGED
@@ -1,25 +1,15 @@
1
- ### 前提・実現したこと
1
+ PRODUCT表のPRODCD列の部品コード番号は、以下の形式で格納されてる。
2
2
 
3
+ PRODCD
3
- ここに質問の内容を詳しく書いてください。
4
+ --------------
4
- (例)PHP(CakePHP)で●●なシステムを作っています。
5
+ A1-Cc01-001
5
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
6
+ A1-DE01-100
7
+ …以下省略…
6
8
 
7
- ### 発生している問題・エラーメッセージ
9
+ 以下の形式で、部品コード番号の先頭番号を隠たレポートを作成するSQL文とし正しものを選びなさい。
8
10
 
9
- ```
10
- エラーメッセージ
11
+ xx-Cc01-001
11
- ```
12
12
 
13
- ### 該当のソースコード
13
+ A. select rpad(substr(prodcm, instr(prodcd, '-')), length(prodcd) - instr(prodcd, '-'), 'x') from product
14
14
 
15
- ```ここに言語名を入力
16
- ソースコード
17
- ```
18
-
19
- ### 試したこと
15
+ B. select
20
-
21
- ここに問題に対して試したことを記載してください。
22
-
23
- ### 補足情報(FW/ツールのバージョンなど)
24
-
25
- ここにより詳細な情報を記載してください。