フィールド「order_number」がINTとして設定されたmysqlデータベースがあります。奇妙な場合、注文番号には末尾のrが必要です。たとえば、2100rは明らかにINTは数字のみを受け入れ、VARCHARを使用すると番号を正しくASCまたはDESCに並べ替えます。この制限を克服するために、末尾のr文字を正しく受け入れますが、数値を番号順に正しくソートしません。INTオプションで文字を強制的に受け入れる方法はありますか?
質問する
1769 次
5 に答える
1
アカウント ID に文字が含まれている場合は、アカウント ID を文字列として保存する必要があります。ただし、文字が常にサフィックスである限り、正しく順序付けできます。これは、AccountID 値の先頭にスペースがあるかどうかに関係なく機能します。
SELECT *
FROM Account
ORDER BY CAST(AccountID as UNSIGNED INTEGER), AccountID
これは数値的に順序付けされ、字句的に順序付けすることで等しい数を処理します。
http://sqlfiddle.com/#!2/a16bf/8/0
「r」の注文を、同じ番号の飾り気のない友達の前に表示したい場合は、次のようにします。
SELECT *
FROM Account
ORDER BY CAST(AccountID as UNSIGNED INTEGER), AccountID DESC
于 2012-08-16T12:08:10.203 に答える
0
CAST
MySQLで関数を使用できますがorder_number
、テーブルに新しいデータを挿入する前に、型キャストを使用してintとして格納することをお勧めします。
SELECT CAST(int_col AS CHAR);
SELECT CAST(char_col AS unsigned INTEGER);
于 2012-08-16T11:33:48.023 に答える
0
この方法 (number_string * 1) を使用して文字列を数値に変換してみてください。
SELECT * FROM table ORDER BY column * 1;
于 2012-08-16T12:30:26.543 に答える
0
いいえ、できません。@Jonが言ったように、INT
フィールドにVARCHAR
データを強制的に保持する他のオプションはありません。
于 2012-08-16T12:51:05.960 に答える
0
いいえ、そのようなオプションはありません。
VARCHAR
おそらく、注文番号用の列と、並べ替え用の別の列 (おそらくINT
)を使用する必要があります。行を挿入および更新するときの順序番号に基づいてヘルパー列を設定します。
于 2012-08-16T11:35:03.410 に答える