
このサイトにある、プラグラムの一部で知りたい事があります。実際に試せれば話は早いのですが、
sqlがmariaDBを使用しているためか、上手くいかないので教えて欲しいです。
知りたいのは下記プログラムの
SET student_names = SUBSTRING(student_names, 3);
は、サイトでも説明があるのですが、,(カンマ)を取り除いているらしいのですが、2文字目が,(カンマ)で3文字目から最後までを取得している処理だと思いますが、1文字目はどんなものが入っているのでしょうか?
https://mysql.sql55.com/sql/mysql-cursor.php
プログラム
DROP PROCEDURE IF EXISTS get_student_names;
DELIMITER //
CREATE PROCEDURE get_student_names (OUT student_names VARCHAR(4000))
BEGIN
DECLARE student_name VARCHAR(100) DEFAULT "";
DECLARE done INT DEFAULT FALSE;
DECLARE cur_student CURSOR FOR
SELECT CONCAT(first_name, ' ', last_name)
FROM students
ORDER BY first_name,
last_name;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET done = TRUE;
SET student_names = '';
OPEN cur_student;
loop1: LOOP
FETCH cur_student INTO student_name;
IF done THEN
LEAVE loop1;
END IF;
SET student_names = CONCAT(student_names, ", ", student_name);
END LOOP loop1;
CLOSE cur_student;
SET student_names = SUBSTRING(student_names, 3);
END//
DELIMITER ;
No.3
- 回答日時:
>> 0文字の文字列 + カンマ文字 + 空白文字 + "太郎"
> SUBSTRINGで空白文字が先頭に来るように聞こえる
おそらく以下だと誤解していると思いますが
1文字目 = 0文字の文字列、の文字?
2文字目 = カンマ文字
3文字目 = 空白文字 ← SUBSTRINGした文字列の先頭
0文字の文字列は、文字数が0です
0ということは、結合すべき文字が無いです
文字が無いから、結合しても無視されます
なので、上記の連結結果は 0文字の文字列 が無視されて
1文字目 = カンマ文字
2文字目 = 空白文字
3文字目 = 太の文字 ← SUBSTRINGした文字列の先頭
No.2
- 回答日時:
読みずらいですが、引用符内の空白文字に着目しましょう。
一般にソースコード内では空白 U+0020 は無視される存在ですが、
引用符内では一文字毎にれっきとしたデータとして扱われます。
実行例)
SET student_names = '';
→ '' -- 0文字の文字列
SET student_names = CONCAT(student_names, ", ", student_name);
→ ', 太郎' -- 0文字の文字列 + カンマ文字 + 空白文字 + "太郎"
→ ', 太郎, 次郎'
→ ', 太郎, 次郎, 三郎'
SET student_names = SUBSTRING(student_names, 3);
→ '太郎, 次郎, 三郎' -- 先頭のカンマと空白を削除
0文字の文字列 + カンマ文字 + 空白文字 + "太郎"の説明だとSUBSTRINGで空白文字が先頭に来るように聞こえるのですが、補足してもらえると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックスの項目をDBにi...
-
【MYSQL】asでリネームしてwher...
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
ワードの差込印刷で教えて下さ...
-
実績累計の求め方と意味を教え...
-
select insertで複数テーブルか...
-
ファイル書込みで一行もしくは...
-
Oracleでの文字列連結サイズの上限
-
最新の日付とその金額をクエリ...
-
レコードが存在しなかった場合
-
MERGE文を単体テーブルに対して...
-
カレントレコードが無い事を判...
-
Excelでセルの書式設定を使用し...
-
ADO VBA 実行時エラー3021
-
JSPのNULLレコード表示について...
-
Access を×ボタンで閉じ...
-
[VBA] ADOの Clone と AddNew
-
SELECTの結果で同一行を複数回...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
使うべきでない文字。
-
【初歩】ラジオボタンをつかっ...
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
チェックボックスの項目をDBにi...
-
割合(パーセント)を求めるに...
-
SQLの集計で「全て」の合計も表...
-
表示幅を短くしたい
-
ビット演算
-
検索機能で条件を指定しない場...
-
月別、販売員別の集計がわかり...
-
Update文の書き方について
-
UNIONについて
-
[初心者]A表の2つの値からB表...
-
MySQLのクエリについて
-
今週の日曜日から土曜日までの...
-
初心者Mysqlの関数のsubstring...
-
カウント結果を1レコードの中...
おすすめ情報