MVCモデルでORマッピングをするとき、
値の型が可変であるときの処理ってちょっと難しい。
まあ、基本的には文字列で保持しておいて、
インスタンス化するときにキャストしてやれば問題ない。
特にRubyみたいな動的型付け言語の場合。
が、DBの中に文字列で格納していると問題が起こることがある。
そう、ソートするときだ。
文字列の時は基本的に問題ない。
しかし、整数や小数の時が問題。
で、整数の時は別に問題ない。
CAST(column ,TYPE)でキャストしてやれる。
問題なのは小数の時だ。
MySQLのCASTの場合、
数字以外の文字列が登場するまでの数字を整数に直しているみたいだ。
たとえば、
'1.0002'->1
'43.3'->43
'59.8'->59
という感じだ。
となれば、ソートしようとしたとしても、小数点以下の値は評価されないという困ったことになる。
頭を悩ませて調べてみた。
すると、リファレンスに以下の一文が。
>算術演算でストリングを使用している場合、これは浮動小数点数に変換されます。
試しにやってみた。
SELECT (string_value + 0.01 -0.01) FROM table;
'1.0002'->1.0002
'43.3'->43.3
'59.8'->59.8
まんまとDECIMALで帰ってきましたよ。
ビバ暗黙キャスト。
PR