19896

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています

質問 19896

msg# 1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2016-5-29 20:52
kokesi_kappa  新米   投稿数: 2
SUBSTR(prod_name, LENGTH(prod_name)-2, 1)とSUBSTR(prod_name, -3, 1)がイコールになることが良く分かりません。

prod_nameの長さ-2の結果がなぜ「-3」になるのかどなたか解説して頂けませんでしょうか。

なし Re: 19896

msg# 1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-5-29 21:41
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
SUBSTR(prod_name, LENGTH(prod_name)-2, 1)とSUBSTR(prod_name, -3, 1)がイコールになることが良く分かりません。

prod_nameの長さ-2の結果がなぜ「-3」になるのかどなたか解説して頂けませんでしょうか。
参考に書いてありますよ
引用:
・SUBSTR関数は引数で指定された文字列の部分文字列を返します。

  SUBSTR(文字列, m[, n])

 引数で指定された文字列のm文字目からn文字分の文字列を返します。nが省略された場合はm文字目から末尾までの文字列を返します。
 なお、mに負の値が指定された場合は、文字列の末尾から数えてm文字目からn文字文の文字列を返します。

※あ、「文字分」が「文字文」になってる…
つまり、このSQLではそれぞれ
・指定した文字列の全文字数-2の位置から1文字
・指定した文字列の後ろから3番め(-3)の位置から1文字
が表示されるわけですね。

以下の実例を元にすると、abcdefgという文字列は7文字だということがわかります。
SQL> select length('abcdefg') from dual;

LENGTH('ABCDEFG')
-----------------
		7
なので、当然7-2=5文字目は
SQL> select length('abcdefg')-2 from dual;

LENGTH('ABCDEFG')-2
-------------------
		  5
e(abcdefg)ですよね?
SQL> select substr('abcdefg', length('abcdefg')-2,1) from dual;

S
-
e
もう一つのパターン、「後ろから3文字目」で考えると並び替えて
SQL> select substr('abcdefg', -3, 1) from dual;

S
-
e
e(gfedcba)ですよね?

なし Re: 19896

msg# 1.2
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-5-30 1:07
kokesi_kappa  新米   投稿数: 2
ご丁寧な解説ありがとうございます!
ようやく理解できました。

なし Re: 19896

msg# 1.3
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-5-30 9:22
staff_meg  長老   投稿数: 427
arashi1977さん

ご指摘の点を修正致しました。
ご報告、誠にありがとうございました。

  >フォーラム検索へ


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