sql >> Databáze >  >> RDS >> Mysql

extrahujte čísla z buňky *varchar* a počítejte s nimi v čistém mysql

Určitě to lze udělat, ale SQL je navrženo na základě axiomu atomických hodnot (tj. první normální forma ). Rozdělení pole není téměř nikdy nutné. Jediný čas, kdy jej budete potřebovat v dobře navržené databázi, je s daty, kde byste mohli chtít pracovat pouze s měsícem nebo rokem v datovém poli. I když jistě najdete databáze, které navrhl nějaký idiot, se kterými jste nuceni pracovat, které porušují tento základní koncept, není dobrý nápad začínat tím, že se snažíte zjistit, jak s těmito návrhy pracovat.

Navíc, váš poslední krok „uložit do té buňky 239“ mě nutí myslet si, že se stále díváte na databáze, jako by to byly tabulky. Oni nejsou. Další základní součástí databáze je, že pořadí řádků není důležité. Na druhou stranu pole vždy souvisí s ostatními poli ve stejném řádku. Můžete nastavit hodnotu jednoho z polí na něco, kde pole ID tohoto záznamu je 239, ale obecně vás nikdy nebude zajímat, že záznam je 239.

To znamená, že zde je dotaz, který udělá to, co chcete:

Předpoklad:formát pole je "11a22 b". To znamená dvoumístné číslo, za kterým následuje písmeno, za nímž následuje další dvoumístné číslo, případně mezera a písmeno '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. Odstraňte mnoho řádků z tabulky pomocí id v Mysql

  2. Složený FULLTEXTOVÝ index v MySQL

  3. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT a další metody získání poslední identity

  4. Žádná taková výjimka sloupce sqlite