レス
元トピ次レス
タイトル
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(abcdefg)ですよね?
[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(gfedcba)ですよね? :-)

レス一覧

元トピ次レス


Ping-tモバイルTOP

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