sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION Try grati full block via procedure lines: grati insert all: OK (47 rows) grati update simple OK grati fecha_corte OK grati fecha_corte if: SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect datetime value: '30' (Connection: mysql, Host: 127.0.0.1, Port: 3306, Database: condimentos4_tools, SQL: UPDATE empleados_grati eg SET fecha_corte = IF(day(fecha_cese) = LAST_DAY(concat(anio, '-', mes, '-01')), fecha_cese, fecha_corte) WHERE periodo = 202601)