Convertir varchar numérique dans Informix
J'ai un problème lors de la conversion de type varchar Int type de Informix.
En fait, je ne sais pas si la valeur est vraiment de type varchar ou pas qui je veux convertir en INT. C'est un système sandbox.
Comme Par Exemple:
Je suis en train de lancer ce genre de
Select telnumber from numbers n
where Cast(n.telnumber AS INT) between 1234 and 9999
J'ai eu cette erreur:
"Le caractère de conversion numérique d'erreur"
Si j'exécute cette requête comme ceci:
Select telnumber from numbers n where n.telnumber between '1234' and '9999'
il apporte un jeu de résultats, mais pas dans la gamme que j'ai défini.
130987
130710
130723
Comment puis-je convertir telnumber à une valeur numérique et l'utiliser dans "entre" 1234 et 9999 gamme
OriginalL'auteur Tolga | 2010-03-26
Vous devez vous connecter pour publier un commentaire.
L'erreur de conversion suggère que certaines des valeurs de la telnumber colonne ne sont pas formatés comme un entier valide - et donc déclencher l'erreur que vous voyez lorsque la conversion est tentée.
La deuxième requête affiche les valeurs supplémentaires parce que '123' vient entre 10 et 20 " en comparaison des chaînes de caractères.
Si vous souhaitez vous limiter à des nombres à 4 chiffres, puis vous pouvez utiliser:
Ce serait encore include '1AA2" dans le jeu de résultats.
Plein support des expressions régulières (comme PCRE) n'est pas présent en standard dans ID - malheureusement. Toutefois, le non-standard CORRESPOND à l'opérateur devrait vous permettre de le faire:
Qui est une expression régulière simple - mais le '*' est une coquille d'expansion de style 'importe quelle séquence de zéro ou plus caractères" plutôt que de l'Étoile de Kleene "zéro ou plusieurs répétitions du caractère précédent'.
OriginalL'auteur Jonathan Leffler
Réponse Simple:
Informix a construit dans le casting, que vous pouvez utiliser comme ceci:
Plus loin:
Cependant, comme Jonathan Leffler souligné précédemment, il semble que votre jeu de données contient des valeurs qui ne sont pas nécessairement en fonte de pouvoir entier.
Si c'est le cas, alors peut-être que ce n'est pas l'idéal schéma pour vos fins?
Si vous avez absolument besoin d'avoir des caractères non numériques dans les ici (par exemple, je soupçonne que vous vous retrouverez avec un '-', '(' ou ')'), vous pourriez essayer en excluant les lignes qui correspondent à la non-numérique caractères:
Sinon, vous pouvez peut-être essayer d'utiliser une procédure stockée, par l'utilisation d'un bloc d'EXCEPTION? (Caractère de conversion numérique erreur errno 1213).
De plus amples informations sur l'utilisation de 'EXCEPTION': http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls946.htm
En savoir plus sur la définition et l'utilisation de procédures stockées: http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls906.htm
OriginalL'auteur sanmiguel
Je n'utilise pas Informix, mais cela fonctionne pour moi dans SQL Server:
Cependant, vous aurez probablement courir dans des problèmes parce que les numéros de téléphone sont vraiment chaînes et ne sont pas Entiers, et, finalement, toute tentative de les traiter comme des INTs échouera.
OriginalL'auteur Dour High Arch
Pour moi, cela a fonctionné:
OriginalL'auteur MrCO