Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wyodrębnij liczby z komórki *varchar* i wykonaj z nimi matematykę w czystym mysql

Z pewnością można to zrobić, ale SQL jest zaprojektowany wokół aksjomatu wartości atomowych (tj. pierwsza forma normalna ). Dzielenie pola prawie nigdy nie jest konieczne. Mniej więcej w dobrze zaprojektowanej bazie danych będziesz potrzebować go używać tylko z datami, w których możesz chcieć pracować tylko z miesiącem lub rokiem pola daty. Chociaż na pewno znajdziesz bazy danych zaprojektowane przez jakiegoś idiotę, z którymi jesteś zmuszony pracować, które naruszają tę podstawową koncepcję, złym pomysłem jest zacząć od próby wymyślenia, jak pracować z tymi projektami.

Ponadto ostatni krok „przechowuj w tej komórce 239” sprawia, że ​​wydaje mi się, że nadal patrzysz na bazy danych jak na arkusze kalkulacyjne. Oni nie są. Innym kluczowym elementem bazy danych jest to, że kolejność wierszy nie jest ważna. Z drugiej strony pola są zawsze powiązane z innymi polami w tym samym wierszu. Możesz ustawić wartość jednego z pól na wartość, w której pole identyfikatora tego rekordu to 239, ale generalnie nigdy nie będziesz dbał o to, że rekord jest 239.

To powiedziawszy, oto zapytanie, które zrobi to, czego chcesz:

Założenie:format pola to „11a22 b”. To znaczy dwucyfrowa liczba, po której następuje litera, po której następuje kolejna dwucyfrowa liczba, prawdopodobnie poprzedzona spacją i literą „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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wymień wszystkie identyfikatory i nazwiska klientów, którzy złożyli więcej niż 2 zamówienia

  2. Skrypt Bash do wstawiania wartości w MySQL

  3. PHP 7 nie może znaleźć MySQLi

  4. Nie można przechowywać emotikonów w bazie danych

  5. Problem z parametrami połączenia w pliku konfiguracyjnym sieci