Comment extraire une valeur numérique d'une chaîne dans une requête MySQL?
J'ai un tableau avec deux colonnes: le prix (int) et price_display (varchar).
prix est le prix numérique, par exemple "9990"
price_display est la représentation visuelle, par exemple, "$9.99" ou "9.99 Fr"
J'ai été en mesure de confirmer les deux colonnes correspondent via regexp:
price_display pas regexp
format(price/1000, 2)
Mais dans le cas d'une incompatibilité, je veux extraire la valeur de la price_display colonne et dans la colonne des prix, le tout dans le contexte d'une instruction de mise à jour. Je n'ai pas été en mesure de comprendre comment.
Grâce.
source d'informationauteur Teflon Ted
Vous devez vous connecter pour publier un commentaire.
Cette fonction fait le travail de renvoyant uniquement des chiffres de 0 à 9 à partir de la chaîne, qui fait le travail très bien de résoudre votre problème, indépendamment de ce que les préfixes ou postfixes vous avez.
http://www.artfulsoftware.com/infotree/queries.php?&bw=1280#815
Copié ici pour référence:
Une approche serait d'utiliser REPLACE() fonction:
Cela fonctionne pour les exemples de données que vous avez donné:
La fois le résultat de 999 dans mon test. Avec une mise à jour comme cela, il est important d'être sûr de sauvegarder la base de données tout d'abord, et être au courant de la présentation des articles. Vous pouvez voir tous les "méchants" en faisant cette requête:
Pour moi le CASTING du domaine a fait le tour:
CAST( price AS UNSIGNED )
//Pour l'entier positifCAST( price AS SIGNED )
//Pour le négatif et le positif entierIF(CAST(price AS UNSIGNED)=0,REVERSE(CAST(REVERSE(price) AS UNSIGNED)),CAST(price AS UNSIGNED))
//Fix lorsque le cours commence par quelque chose d'autre, puis un chiffrePour plus de détails, voir:
https://dev.mysql.com/doc/refman/5.0/en/cast-functions.html
J'ai créer une procédure qui détectent le premier nombre dans une chaîne de caractères, et le renvoyer, si pas 0.
Retour du dernier numéro de la chaîne:
Ensuite appeler cette fonction:
sélectionnez getLastNumber("ssss111www222w");
imprimer 222
sélectionnez getLastNumber("ssss111www222www3332");
imprimer 3332
C'est un "codage de l'horreur", base de données relationnelle schémas doivent PAS être écrit comme ceci!
Votre devoir écrire complexes et inutiles code pour valider les données.
Essayer quelque chose comme cela:
En outre, vous pouvez utiliser un
float
double
oureal
au lieu d'un entier.Si vous avez besoin de stocker des données de devise, vous pourriez envisager d'ajouter un champ de devise ou de l'utilisation des systèmes de fonctions locales pour l'afficher dans le format correct.