MySQLで引用符付きの数値文字列を加算する際、数値以外のテキストが含まれているとどのように評価されるのか
はじめに
MySQLでは、引用符で囲まれた文字列同士を算術演算子(+)で加算すると、文字列内の数値だけが評価の対象になります。では、数値の間に数値以外のテキスト(記号や文字など)が含まれていた場合はどうなるのでしょうか。
結論から言うと、MySQLは文字列の先頭にある最初の数値のみを使用して加算を評価し、それ以降の数値以外のテキストは無視します。その際、警告(Warning)も発生します。
実行例
次の例を見てみましょう。ここでは、「1525 * 2」という文字列と「200」という文字列を加算しています。
mysql> SELECT '1525 * 2' + '200' AS Total; +-------+ | Total | +-------+ | 1725 | +-------+ 1 row in set, 1 warning (0.00 sec)
結果の解説
このクエリの結果から、以下のことが確認できます。
- MySQLは文字列「1525 * 2」の中から先頭の数値である「1525」だけを読み取り、これを加算に使用しました。
- 「* 2」という数値以外の部分は完全に無視されています。もし「1525 * 2」全体が数式として評価されていれば、結果は「3050 + 200 = 3250」になるはずです。
- 実際の結果は「1525 + 200 = 1725」となり、最初の数値のみが使われたことがわかります。
- 同時に「1 warning」と表示されているように、文字列から数値への変換が完全ではなかったことを示す警告が発行されています。
まとめ
引用符で囲まれた数値を含む文字列を加算する場合、MySQLは文字列の先頭から読み取れる最初の数値のみを評価に使用し、残りの数値以外のテキストは切り捨てられます。意図しない計算結果やデータの欠落を防ぐためにも、算術演算には数値型のカラムを使用するか、CAST() 関数などで明示的に型変換を行うことをおすすめします。
-
MySQLで文字列を大文字小文字を区別して完全一致検索する方法(COLLATE活用)
MySQLで正確な文字列値(完全一致)を検索するには?MySQLでは、デフォルトの照合順序(collation)が大文字と小文字を区別しないため、WHERE Subject = MySQLのような検索では「mysql」や「MYSQL」などもヒットしてしまいます。大文字小文字まで含めて完全に一致する文字列値だけを検索したい場合は、COLLATE utf8_binを使用します。ここでは、その具体的な手順をサンプルコード付きで解説します。1. サンプルテーブルを作成するまず、検索対象となるテーブルを作成します。mysql> create table DemoTable1620-> (-&
-
MySQLでカンマ区切りの数値文字列を合計する方法を解説
MySQLでは、カンマ区切りの数値文字列を合計するためのカスタム関数を自作することができます。本記事では、テーブルの作成から関数の定義、実際の実行まで、手順を追ってわかりやすく解説します。1. テーブルの作成まず、varchar型のカラムを持つテーブルを作成します。このカラムには、数値を文字列の形式(カンマ区切り)で格納していきます。mysql> create table DemoTable -> ( -> ListOfValues varchar(50) -> );Query OK, 0 rows affected (0.56 sec)2. テストデータの挿入I