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

MySQL MOD() jest uszkodzony:czy to najlepsza alternatywa?

MySQL nie daje fałszywego wyniku, po prostu używa innej implementacji modułu niż oczekiwałeś. Niestety termin moduł wydaje się być zdefiniowany nieco niejednoznacznie, a jego implementacja różni się w zależności od języka. Z tego, co mogę powiedzieć w Wikipedii na Modulo , implementacja MySQL używa dzielenia obciętego :

r = a - n * trunc(a / n)

Gdzie oczekujesz, że implementacja użyje podziału dolnego :

r = a - n * floor(a / n)

Ponieważ w ten sposób zaimplementowałeś swoje pierwsze obejście, powiedziałbym, że jest to prawdopodobnie najlepsza alternatywa dla Mod operatora.

Z tego, co widziałem (i jest to bardzo szybka nienaukowa analiza!), wydaje się, że bardziej imperatywne języki programowania implementują skrócony podział i bardziej funkcjonalne języki matematyczne wydają się używać dzielenia dolnego .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieprawidłowe rzutowanie podczas zwracania mysql LAST_INSERT_ID() przy użyciu dapper.net

  2. Zapobiegaj rzutowaniu łańcucha mysql na int w klauzuli where

  3. Jaka jest wystarczająca dezynfekcja dla adresu URL

  4. aioMySQL nie łączy się z pythonem

  5. Jak znaleźć kolejny bezpłatny unikalny 4-cyfrowy numer