質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

2613閲覧

SQL文 length(trim(列名))-1という文が理解できない。

infra____

総合スコア90

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/08/26 01:39

メールアドレス列2列3
aaaaaaaaaa.jp
bbbbbbbbb.uk
ccccccccccc.cn
dddddddd.fr

上記の表は、『スッキリわかるSQL入門』P166ページを一部省略、改変したものです。
アドレスの最後の2文字を基に、国名列を更新するコードが以下のように記載されています。

SQL

1set 国名=case substring(trim(メールアドレス),length(trim(メールアドレス))-1,2)

length(trim(メールアドレス))-1が理解できないのですが、どういう意味ですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

aaaaaaaaaa.jpを例にとると
length(trim(メールアドレス)) はメールアドレスのバイト数 = 13
最後の2文字から国名を取得するとあるのでjpを取るためには上記の13から1引いた位置、要するに12バイト目から2バイト分を取得すればいいことになります。
それがlength(trim(メールアドレス))-1の意味するところです。

投稿2020/08/26 01:56

azzuro

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

infra____

2020/08/26 01:58

やっと理解できました。引続きよろしくお願い致します。
guest

0

substringが0から始まる想定なのでしょう。
lengthは文字数なので0からはじまるなら1引かないといけないというロジックだと思います

投稿2020/08/26 01:50

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQLはもっとも内側から実行されていきます。
1つずつ分解してください。

trim(メールアドレス) :実行結果を「a」とする ↓ length(a) :実行結果を「b」とする ↓ b - 1

投稿2020/08/26 01:46

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問