少しだけハマったので備忘録含め記事にする。
ハマったこと
本日こんな感じのSQLを作成しました。(色々簡略化はしてます。)
SELECT shop_id,name,close_time
FROM `shops`
WHERE REPLACE(close_time, ':', '') > '2000'
close_timeというのはお店の閉店時間。
db上には「19:00」とか、「22:00」とか、文字列で保管されてます。
replaceすることで、1900とか、2000とかになります。
replace参考:https://www.javadrive.jp/mysql/function/index44.html
'2000'はアプリで入力された時間。文字列。
なので、2000と1900や2200を比較してました。
が、何度やってもうまく判定ができず。
時間によってはうまく行ったりするのでなんでだろ〜?となっていましたが、
SQLでの数字の比較においては基本的にちゃんと数字でやる必要がありました。
解決策
SELECT shop_id,name,close_time
FROM `shops`
WHERE cast(REPLACE(close_time, ':', '') as SIGNED) > cast('2000' as SIGNED)
このように、cast(xxxx as SIGNED)とすることで、xxxxを数値に変換可能です。
cast参考:https://www.javadrive.jp/mysql/function/index51.html#section1
数値同士できちんと変換しよう、というお話しでした。
ここんところjsやphpが8割、2割くらいがSQLいじりだったので、完全にjsやphpの”==”によるよしな比較のノリでいて、気付くのに時間がかかりました。