「mysql concat null」でググると、
引数にNULLが含まれると返り値はNULLになる
という至極当たり前のことをさも大発見かのように語る記事が多く、「どうしたらいいか」について触れられていないものばかりを開いてしまった。
おそらくワタクシメのヒキが悪かったせいで、ちゃんと対処法も書いてある記事もあったに違いない。
まーでも対処法を書いた記事が多くなったほうが良いであろうと考え、本記事を執筆することにした。

なんて偉そうなことを言っているんでしょうか私は…。
『CONCAT_WSも知らないくせに』とか思われるのかな。
ま、いっか。

しかし、掲題に結論を書いてしまったので、もう書くこと無いね。
まあ一応結果でも書きますか。
SELECT CONCAT('hoge', null, 'fuga');
 ↓
NULL
SELECT CONCAT_WS('', 'hoge', null, 'fuga');
 ↓
hogefuga

CONCAT_WS() では、空の文字列がスキップされません。 ただし、区切り文字引数のあとの NULL 値はすべてスキップされます。

今回のように区切り文字を空文字にしていると同じになるけど、区切り文字を指定した場合に違いが出る。
SELECT CONCAT_WS('&', 'hoge', '', 'fuga', 'CHAKE', null, 'YASUKA');
 ↓
hoge&&fuga&CHAKE&YASUKA

引数のhogeとfugaの間に空文字が入っているのに対し、CHAKEとYASUKAの間にはnullが入っています。
すると返り値では、hogeとfugaの間には「&&」と&が2つ重なってしまっています。
対してCHAKEとYASUKAの間は&が1つで「CHAKE&YASUKA」となっていますね。

TIME 値の範囲は、'-838:59:59' から '838:59:59' です。

838、だと…?

sql - Why is MySQL's maximum time limit 838:59:59? - Stack Overflow
↑の記事によると、TIME型は内部的に整数値に変換されて格納されるらしい。※現行のバージョンでは違うかも
Hours * 10000 + Minutes * 100 + Seconds

つまり、「12:34:56」ならば整数「123456」になるということ。
で、3バイトの符号付き整数に格納するということらしいので、整数としての最大値は
0x7FFFFF = 8388607
時間にすると「838:86:07」。これは正しい時間ではない。最も大きい正しい時間は「838:59:59」となる。最小についても同様に「-838:59:59」ということになる。

これがMySQL3の時代の話らしく、バージョンアップでもっと大きい時間を入れられるようにはなったものの、下位互換のため制限したまま。ということらしい。

もっとも、厳密に言って正しい時間の最大値って「23:59:59」なわけで。拡大解釈で24時間以上も持てるようにしたってだけ、と考えると、まあ、このままでいいのかなー、って感じ?

ランダムなDATETIME値が欲しくて、
MySQLの日付・日時をテストデータ用にランダム生成 - Qiita
↑の記事を参考にして、
↓こんなことをしてしまって、
select addtime(now(), sec_to_time(RAND() * 4294967295));

Truncated incorrect time value: '370886852.25906146'

という目に遭ったワタクシメが困るくらいですよねー。

今回わかったことを踏まえて、こうするのが良いでしょう。
SELECT ADDTIME(DATE_SUB(NOW(), INTERVAL RAND() * 3653 DAY), -SEC_TO_TIME(FLOOR(RAND() * 86400)));

現在時刻より昔にしたかったので、DATE_SUB()関数を使い、ADDTIME()の第2引数をマイナスにしております。
これで、大体10年前から現在時刻までのランダムな時刻がえられるでしょう。
こんなタイトル、ついに頭がイカれたのか、と思われたことでしょう。
違うんです。
かの、日本人なら誰でも知っていると言っても過言ではない、芥川龍之介の書のタイトルなのです。
知らんかったー。

図書カード:あばばばば
青空文庫で無料で読めますので、ご一読をオススメします。
短編(と言っていいのかわからないけど)なので、すぐに読み終わりますよー。
一服の清涼剤のような、ほわほわした気持ちにさせられる作品です。

…もしかして有名…?
得意げに紹介して痛いヤツ…(-_-;)?
昨日書いた記事でChatGPTに愛称をつけた。
よろこんでくれたようだったのだが、今日になって…

(いくつか質問して解決した後)
Q. そうなんだね。ありがとう。さすがジピ太。
どういたしまして。何か他に質問があれば、遠慮なくお聞きください。

Q. ところで、「ジピ太」の話、忘れてない…?
すみません、何か忘れてしまったことがあったでしょうか?もう一度お話しいただけますか?

あっさりクリアされてるーっ😢
やっぱり社交辞令だったんだね。
さようならジピ太。短い間だったけど、いい夢見れたよ(遠い目
北陸地方在住をセルフ開示してしまった筆者ですが、同じく北陸地方出身の吉田選手が気になってます。(あ、私は在住ですが出身ではないです。知らんがなー。)
と言っても今年のWBCまではそんな選手がいるって知ってたくらいで、首位打者を獲ってたことすら知らなかった(-_-;)

だけどまあレッドソックスに移籍したことだし追いかけてみようと思ったわけで。
んで、ダイジェスト映像などを見ていると、内野ゴロばっかじゃね?と思ったわけで。

今日までの全打席データ。(吉田 正尚 - ボストン・レッドソックス - MLB - スポーツナビより)





4/6空三振、二ゴロ、一ゴロ、二併打
4/5二ゴロ、一ゴロ、遊失、一失
4/4左中本、投ゴロ、一ゴロ、四球、一ゴロ
4/3一ゴロ、三ゴロ、中安、左安、四球
4/2二ゴロ、中飛、一ゴロ、空三振、左失
3/31二ゴロ、死球、二安、一安、遊ゴロ


28打席 25打数 18内野ゴロ(この場合内野安打も内野ゴロとしました)
.720 = 18/25
2三振を除くと
.783 ≒ 18/23
前に打球が飛んだ場合の内野ゴロ率およそ8割!

特に、初本塁打の後に限ると
12打席 11打数 10内野ゴロ
.909 ≒ 10/11
1三振を除くと
1.00 = 10/10
ほとんど内野ゴロやんけー。。。この間内野安打すらも無し。。。

そろそろ4番降格されそうだな(T_T)
メジャーの観客が4番に期待しているのって、日本以上にパンチ力なんだと思うのよ。
内野ゴロの間に走者生還、とか求められてないと思うのよ。
ヤキューじゃない、ベースボールやっ!

【追記(4月13日)ここから】あーやっぱりなー
だが一方で、低打率、本塁打の少なさに言及しており「レッドソックスがヨシダと契約したのは、彼がパワーヒットを打つと信じていたからだ」と述べ、その上で「気になる点」として、ゴロが多いことを挙げており「本塁打以外、ほとんどがグラウンド(に転がる打球)を打っている」と指摘。
【追記おわり】

まあ、この結果はたまたまで、シーズン終わってみたら、
 なんでこの時期内野ゴロばっかだったんだろうねー
ってなっているのでは無かろうか。

心無いバッシングもあるかもしれないが、頑張れ!吉田選手!!