sql >> Databasteknik >  >> RDS >> Mysql

extrahera siffror från en *varchar*-cell och matte med dem i ren mysql

Det kan säkert göras, men SQL är designat kring axiomet för atomvärden (dvs första normalformen ). Att dela ett fält är nästan aldrig nödvändigt. Ungefär den enda gången du behöver använda den i en väldesignad databas är med datum där du kanske vill arbeta med bara månaden eller året för ett datumfält. Även om du säkert kommer att hitta databaser som någon idiot designat och som du tvingas arbeta med som bryter mot detta kärnkoncept, är det en dålig idé att börja med att försöka ta reda på hur man arbetar med dessa designs.

Dessutom får ditt sista steg att "lagra i den cellen 239" mig att tro att du fortfarande tittar på databaser som om de vore kalkylblad. Dom är inte. En annan kärnkomponent i en databas är att ordningen på raderna inte är viktig. Fält å andra sidan är alltid relaterade till andra fält i samma rad. Du kan ställa in värdet på ett av fälten till något där ID-fältet för den posten är 239, men du kommer i allmänhet aldrig att bry dig om att en post är den 239:e.

Som sagt, här är en fråga som gör vad du vill:

Antagande:formatet för fältet är "11a22 b". Det vill säga ett tvåsiffrigt nummer, följt av en bokstav, följt av ytterligare ett tvåsiffrigt tal, eventuellt följt av ett mellanslag och bokstaven '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


  1. Hur infogar man data i MySQL med automatisk inkrementerad primärnyckel?

  2. Oracle pl-sql escape-tecken (för en ' )

  3. MySQL-syntaxfel i WHILE-satsen

  4. Hur mappar man en Native Query till en POJO när jag inte har någon Entity på mitt projekt?