Mysql
 sql >> Database >  >> RDS >> Mysql

estrarre i numeri da una cella *varchar* e fare calcoli con loro in puro mysql

Può certamente essere fatto, ma SQL è progettato attorno all'assioma dei valori atomici (cioè, prima forma normale ). La divisione di un campo non è quasi mai necessaria. L'unica volta in cui sarà necessario utilizzarlo in un database ben progettato è con le date in cui potresti voler lavorare solo con il mese o l'anno di un campo data. Anche se sicuramente troverai database progettati da qualche idiota con cui sei costretto a lavorare che violano questo concetto fondamentale, è una cattiva idea iniziare cercando di capire come lavorare con questi progetti.

Inoltre, il tuo ultimo passaggio di "memorizza in quella cella 239" mi fa pensare che stai ancora guardando i database come se fossero fogli di calcolo. Loro non sono. Un altro componente fondamentale di un database è che l'ordine delle righe non è importante. I campi, invece, sono sempre correlati ad altri campi nella stessa riga. Potresti impostare il valore di uno dei campi in modo che sia qualcosa in cui il campo ID di quel record è 239, ma in genere non ti interessa il fatto che un record sia il 239esimo.

Detto questo, ecco una query che farà quello che vuoi:

Presupposto:il formato del campo è "11a22 b". Cioè un numero a due cifre, seguito da una lettera, seguito da un altro numero a due cifre, eventualmente seguito da uno spazio e dalla lettera '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