sql >> Base de Datos >  >> RDS >> Mysql

extraer números de una celda * varchar * y hacer matemáticas con ellos en mysql puro

Ciertamente se puede hacer, pero SQL está diseñado en torno al axioma de los valores atómicos (es decir, primera forma normal ). Dividir un campo casi nunca es necesario. Casi la única vez que necesitará usarlo en una base de datos bien diseñada es con fechas en las que quizás desee trabajar solo con el mes o el año de un campo de fecha. Si bien seguramente encontrará bases de datos que algún idiota diseñó y con las que se ve obligado a trabajar que violan este concepto central, es una mala idea comenzar tratando de descubrir cómo trabajar con estos diseños.

Además, su último paso de "almacenar en esa celda 239" me hace pensar que todavía está mirando bases de datos como si fueran hojas de cálculo. Ellos no están. Otro componente central de una base de datos es que el orden de las filas no es importante. Los campos, por otro lado, siempre están relacionados con otros campos en la misma fila. Puede establecer el valor de uno de los campos para que sea algo donde el campo de ID de ese registro sea 239, pero generalmente nunca le importará el hecho de que un registro es el 239.

Dicho esto, aquí hay una consulta que hará lo que quieras:

Suposición:el formato del campo es "11a22 b". Es decir, un número de dos dígitos, seguido de una letra, seguido de otro número de dos dígitos, posiblemente seguido de un espacio y la letra '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