1

フィールド「order_number」がINTとして設定されたmysqlデータベースがあります。奇妙な場合、注文番号には末尾のrが必要です。たとえば、2100rは明らかにINTは数字のみを受け入れ、VARCHARを使用すると番号を正しくASCまたはDESCに並べ替えます。この制限を克服するために、末尾のr文字を正しく受け入れますが、数値を番号順に正しくソートしません。INTオプションで文字を強制的に受け入れる方法はありますか?

4

5 に答える 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

CASTMySQLで関数を使用できますが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 に答える