Mysql
 sql >> Base de données >  >> RDS >> Mysql

extraire des nombres d'une cellule * varchar * et faire des calculs avec eux en mysql pur

Cela peut certainement être fait, mais SQL est conçu autour de l'axiome des valeurs atomiques (c'est-à-dire première forme normale ). Fractionner un champ n'est presque jamais nécessaire. À peu près la seule fois où vous aurez besoin de l'utiliser dans une base de données bien conçue, c'est avec des dates où vous voudrez peut-être travailler uniquement avec le mois ou l'année d'un champ de date. Bien que vous trouviez certainement des bases de données conçues par un idiot avec lesquelles vous êtes obligé de travailler et qui violent ce concept de base, c'est une mauvaise idée de commencer par essayer de comprendre comment travailler avec ces conceptions.

De plus, votre dernière étape de "stocker dans cette cellule 239" me fait penser que vous regardez toujours des bases de données comme des feuilles de calcul. Ils ne sont pas. Un autre composant essentiel d'une base de données est que l'ordre des lignes n'est pas important. Les champs, en revanche, sont toujours liés à d'autres champs de la même ligne. Vous pouvez définir la valeur de l'un des champs sur quelque chose où le champ ID de cet enregistrement est 239, mais vous ne vous soucierez généralement pas du fait qu'un enregistrement est le 239e.

Cela dit, voici une requête qui fera ce que vous voulez :

Hypothèse :le format du champ est "11a22 b". C'est-à-dire un nombre à deux chiffres, suivi d'une lettre, suivie d'un autre nombre à deux chiffres, éventuellement suivi d'un espace et de la lettre "b".

SELECT CAST(SUBSTRING(Value,1,2) AS INT) 
    * CAST(SUBSTRING(Value,3,2) AS INT) 
    + CASE RIGHT(Value,1) WHEN 'b' THEN -1 ELSE 0 END
FROM MyTable