2012-08-16 4 views
1

J'ai une base de données mysql avec un champ "order_number" défini comme INT à l'occasion impair le numéro de commande aurait besoin d'un trailing r eg 2100r évidemment INT n'acceptera que des nombres et triera le nombre correctement ASC ou DESC si j'utilise VARCHAR pour surmonter cette restriction, il acceptera correctement le caractère r final mais ne triera pas les nombres dans l'ordre numérique correctement, est-il possible que l'option INT puisse être forcée à accepter un caractère?Mysql INT avec un caractère

Répondre

0

Vous pouvez utiliser la fonction CAST dans MySQL, mais c'est une bonne habitude de stocker order_number en int en utilisant le typage avant d'insérer de nouvelles données dans la table.

SELECT CAST(int_col AS CHAR); 

SELECT CAST(char_col AS unsigned INTEGER); 
0

Non, cette option n'existe pas.

Vous devez probablement utiliser une colonne VARCHAR pour le numéro de commande et une colonne séparée (éventuellement INT) uniquement pour le tri; remplir la colonne d'assistance en fonction du numéro de commande lors de l'insertion et de la mise à jour des lignes.

1

Vous devez stocker vos ID de compte sous forme de chaînes de caractères si l'une d'entre elles contient des lettres. Mais vous pouvez les commander correctement tant que les lettres sont toujours des suffixes. Cela fonctionne si vos valeurs AccountID ont ou non des espaces principaux.

SELECT * 
    FROM Account 
ORDER BY CAST(AccountID as UNSIGNED INTEGER), AccountID 

Cela commande numérique, puis traiter les nombres égaux en commandant lexicalement.

http://sqlfiddle.com/#!2/a16bf/8/0

Si vous vouliez les commandes « r » à montrer devant leurs amis sans fioritures avec le même numéro, vous pouvez le faire:

SELECT * 
    FROM Account 
ORDER BY CAST(AccountID as UNSIGNED INTEGER), AccountID DESC 
0

Essayez de convertir la chaîne à numéro à l'aide de cette façon (chaîne_numéro * 1), par exemple -

SELECT * FROM table ORDER BY column * 1; 
0

Non, pas possible. Comme l'a dit @Jon, il n'y a pas d'autres options pour forcer un champ INT à conserver les données VARCHAR.