Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden eines gespeicherten Datumsfelds zum Berechnen eines Felds, das die aktuelle Anzahl der vergangenen Tage berechnet

Vielleicht möchten Sie etwas über CURDATE() lesen und DATEDIFF() Funktionen (und andere Funktionen in MySQL, die für Sie in Zukunft nützlich sein könnten) hier:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff

SELECT *, DATEDIFF(CURDATE(), mydatefield) AS days_since
FROM MyTable;

Wenn Sie möchten, dass dies in die Tabelle eingebaut wird, können Sie ein VIEW:

verwenden
CREATE VIEW MyView AS
  SELECT *, DATEDIFF(CURDATE(), mydatefield) AS days_since
  FROM MyTable;

MySQL 5.7 unterstützt generierte Spalten wo Sie eine virtuelle Spalte basierend auf einem Ausdruck hinzufügen können, aber das funktioniert in diesem Fall nicht, weil die Verwendung einer nicht-deterministischen Funktion wie CURDATE() in solchen Ausdrücken nicht erlaubt ist.

ALTER TABLE MyTable ADD COLUMN days_since INT AS (DATEDIFF(CURDATE(), mydatefield));
ERROR 3102 (HY000): Expression of generated column 'days_since' contains a disallowed function.