LoginSignup
0
0

More than 1 year has passed since last update.

【SQL】REPLACEした文字列の比較をしたけどJSとPHPのようにはいかなくて冬

Last updated at Posted at 2023-01-26

少しだけハマったので備忘録含め記事にする。

ハマったこと

本日こんな感じの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の”==”によるよしな比較のノリでいて、気付くのに時間がかかりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0