電子書籍の厳選無料作品が豊富!

このサイトにある、プラグラムの一部で知りたい事があります。実際に試せれば話は早いのですが、
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 ;

A 回答 (3件)

ループ内でstudent_namesに名前を足す際カンマとスペースで繋いでいます。


つまり、最初の一文字目はカンマ、二文字目はスペースになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。的確な回答ありがとうございます。納得のいく説明です。すぐにベストアンサーでもよいのですが、他の回答者との回答の整合性が取れていないため、まだ確信が持てずにいますので、もうしばらくお待ちください。

お礼日時:2024/06/24 16:18

>> 0文字の文字列 + カンマ文字 + 空白文字 + "太郎"


> SUBSTRINGで空白文字が先頭に来るように聞こえる

おそらく以下だと誤解していると思いますが
1文字目 = 0文字の文字列、の文字?
2文字目 = カンマ文字
3文字目 = 空白文字 ← SUBSTRINGした文字列の先頭

0文字の文字列は、文字数が0です
0ということは、結合すべき文字が無いです
文字が無いから、結合しても無視されます

なので、上記の連結結果は 0文字の文字列 が無視されて
1文字目 = カンマ文字
2文字目 = 空白文字
3文字目 = 太の文字 ← SUBSTRINGした文字列の先頭
    • good
    • 0
この回答へのお礼

ありがとう

補足ありがとうございます。理解できました。
助かりました。

お礼日時:2024/06/25 07:52

読みずらいですが、引用符内の空白文字に着目しましょう。



一般にソースコード内では空白 U+0020 は無視される存在ですが、
引用符内では一文字毎にれっきとしたデータとして扱われます。

実行例)
SET student_names = '';
→ '' -- 0文字の文字列
SET student_names = CONCAT(student_names, ", ", student_name);
→ ', 太郎' -- 0文字の文字列 + カンマ文字 + 空白文字 + "太郎"
→ ', 太郎, 次郎'
→ ', 太郎, 次郎, 三郎'
SET student_names = SUBSTRING(student_names, 3);
→ '太郎, 次郎, 三郎' -- 先頭のカンマと空白を削除
    • good
    • 0
この回答へのお礼

0文字の文字列 + カンマ文字 + 空白文字 + "太郎"の説明だとSUBSTRINGで空白文字が先頭に来るように聞こえるのですが、補足してもらえると助かります。

お礼日時:2024/06/24 16:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A