MySQLでvarcharを符号なし整数(UNSIGNED)に変換する方法
MySQLでvarcharを符号なし整数に変換するには?
MySQLでvarchar型の文字列データを符号なし整数(UNSIGNED)として扱いたい場合は、CAST()関数を使用します。文字列のままでは辞書順にソートされてしまうため、数値として正しく並べ替えたいときなどに非常に便利です。
ここでは、実際にテーブルを作成し、CAST()関数でvarcharを符号なし整数に変換する手順をサンプルコードとともに解説します。
1. テーブルを作成する
まず、Amountカラムを持つテーブルを作成します。Amountカラムはvarchar型として定義します。
mysql> create table DemoTable868(Amount varchar(100)); Query OK, 0 rows affected (0.51 sec)
2. レコードを挿入する
次に、insertコマンドを使ってテーブルに数件のレコードを挿入します。
mysql> insert into DemoTable868 values('781');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable868 values('990');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable868 values('1002');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable868 values('560');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable868 values('890');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable868 values('9890');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable868 values('8723');
Query OK, 1 row affected (0.16 sec)3. テーブルの中身を確認する
select文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable868;
実行すると、次のような結果が出力されます。
+--------+ | Amount | +--------+ | 781 | | 990 | | 1002 | | 560 | | 890 | | 9890 | | 8723 | +--------+ 7 rows in set (0.00 sec)
4. CAST()関数でvarcharを符号なし整数に変換する
varcharを符号なし整数に変換するには、cast(カラム名 as unsigned)のように記述します。以下のクエリでは、Amountカラムをunsigned型にキャストしたうえで、降順にソートしています。
mysql> select cast(Amount as unsigned) AS Amount from DemoTable868 order by Amount DESC;
実行結果は以下のとおりです。
+--------+ | Amount | +--------+ | 9890 | | 8723 | | 1002 | | 990 | | 890 | | 781 | | 560 | +--------+ 7 rows in set (0.01 sec)
ポイント:数値として正しくソートされる理由
varchar型のままORDER BYでソートすると、「9890」よりも「990」が先に来るなど、文字列としての辞書順比較になってしまいます。CAST()関数でunsignedに変換することで、値が数値として認識され、上記のように正しい数値順で並べ替えられるのが大きなメリットです。
なお、同様の変換はCONVERT(Amount, UNSIGNED)でも可能です。用途に応じて使い分けるとよいでしょう。
-
C#でDecimalを同等の64ビット符号なし整数(ulong)に変換する方法
C#で指定した Decimal の値を、それと同等の64ビット符号なし整数(ulong)に変換するには、Decimal.ToUInt64() メソッドを使用します。このメソッドは、小数点以下を切り捨てた整数値を返します。なお、変換元の値が負の場合や UInt64.MaxValue を超える場合は、OverflowException がスローされる点に注意してください。例1:基本的な使い方using System; public class Demo { public static void Main() { &
-
C#でDecimalを8ビット符号なし整数(byte)に変換する方法
C#で指定されたDecimal(10進数)の値を、それに相当する8ビット符号なし整数(byte型)へ変換するには、Decimal.ToByte()メソッドを使用します。Decimal.ToByte()メソッドとはDecimal.ToByte()メソッドは、引数として渡されたDecimal値を最も近い整数に丸め、その結果をbyte型(0~255の範囲)で返します。変換元の値がbyte型の範囲を超える場合や負の値の場合は、OverflowExceptionがスローされる点に注意してください。サンプルコードusing System; public class Demo { public sta