Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

extrair números de uma célula *varchar* e fazer contas com eles no mysql puro


Isso certamente pode ser feito, mas o SQL é projetado em torno do axioma dos valores atômicos (ou seja, primeira forma normal ). Dividir um campo quase nunca é necessário. A única vez que você precisará usá-lo em um banco de dados bem projetado é com datas em que você pode querer trabalhar apenas com o mês ou ano de um campo de data. Embora você certamente encontre bancos de dados que algum idiota projetou e com os quais você é forçado a trabalhar que violam esse conceito central, é uma má ideia começar tentando descobrir como trabalhar com esses designs.

Além disso, sua última etapa de "armazenar naquela célula 239" me faz pensar que você ainda está olhando para bancos de dados como se fossem planilhas. Eles não são. Outro componente central de um banco de dados é que a ordem das linhas não é importante. Os campos, por outro lado, estão sempre relacionados a outros campos na mesma linha. Você pode definir o valor de um dos campos como algo em que o campo de ID desse registro é 239, mas geralmente nunca se importará com o fato de um registro ser o 239º.

Dito isso, aqui está uma consulta que fará o que você deseja:

Suposição:o formato do campo é "11a22 b". Ou seja, um número de dois dígitos, seguido de uma letra, seguido de outro número de dois dígitos, possivelmente seguido de um espaço e da 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