レス
元トピ
次レスタイトル
Re: 19896
フォーラム
最強WEB問題集Oracle Master 12c Bronze SQL基礎
投稿ユーザ(投稿日)
(2016/5/29)本文
-----引用(始)-----
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文字だということがわかります。
[code]
SQL> select length('abcdefg') from dual;
LENGTH('ABCDEFG')
-----------------
7
[/code]
なので、当然7-2=5文字目は
[code]
SQL> select length('abcdefg')-2 from dual;
LENGTH('ABCDEFG')-2
-------------------
5
[/code]
e(abcd
efg)ですよね?
[code]
SQL> select substr('abcdefg', length('abcdefg')-2,1) from dual;
S
-
e
[/code]
もう一つのパターン、「後ろから3文字目」で考えると並び替えて
[code]
SQL> select substr('abcdefg', -3, 1) from dual;
S
-
e
[/code]
e(gf
edcba)ですよね? :-)
レス一覧
元トピ
次レス
Copyright (c) 2010
Ping-t All rights reserved.