Работа с функциями даты mysql и добавление дня к дате при отслеживании
Итак, у меня есть эта таблица
CREATE TABLE `chittytransactions` (
`ChittyTransactionID` int(11) NOT NULL,
`AuctionID` int(11) NOT NULL,
`ChittyAccNo` int(11) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`Amount` double DEFAULT NULL,
`Description` varchar(50) DEFAULT NULL,
`TransRefence` varchar(50) DEFAULT NULL COMMENT 'Reference from actual Bank transaction',
`TransStatus` tinyint(1) DEFAULT NULL COMMENT 'If Transaction Pending or Cleared',
`ClearanceDate` datetime DEFAULT NULL,
`PaymentMethod` int(1) DEFAULT NULL COMMENT '0- Cash, 1- bank transfer, 2- personal credit etc'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Я создаю триггер, который проверяет Date
и clearanceDate
чтобы увидеть, если clearanceDate
больше, чем фактическая дата, затем добавьте плату за просрочку. У меня есть это до сих пор:
DROP TRIGGER IF EXISTS chitty_before_trig;
DELIMITER ;;
CREATE TRIGGER chitty_before_trig BEFORE INSERT ON chittytransactions
FOR EACH ROW
BEGIN
DECLARE `userId` INT(11);
SELECT `UserId`
INTO `userId`
FROM chittyusers
WHERE ChittyAccNo = NEW.ChittyAccNo;
IF NEW.ClearanceDate <> NEW.`Date` THEN
UPDATE `chittyusers` SET LatePaymentFee = 50 WHERE UserId = userId;
END IF;
END;;
DELIMITER;
Используя функции даты, как я могу проверить, прошел ли день и т. Д., И добавить просроченную оплату за каждый день? Пожалуйста, что-нибудь было бы здорово. Спасибо.
1 ответ
Если я понял вопрос, то что-то вроде
IF NEW.ClearanceDate > NEW.`Date` THEN
UPDATE chittyusers
SET LatePaymentFee = 10 * DATEDIFF(NEW.ClearanceDate, NEW.`Date`)
WHERE UserId = userId;
END IF;
будет работать с вашей текущей схемой. DATEDIFF(date1, date2)
возвращает количество дней между date1
а также date2
- результат отрицательный, если date1
раньше чем date2
, Обратите внимание, что я изменил оператор сравнения с <>
в >
так что поздний сбор применяется, если ClearanceDate
после Date
, но не если это раньше.
Я должен отметить, что имея голую числовую константу, такую как 10
в вашем коде это считается очень плохой формой. Немного лучше было бы объявить локальную переменную с именем baseLateFee
установите его равным 10, а затем используйте переменную в своих расчетах. Гораздо лучшая альтернатива, особенно если есть вероятность, что baseLateFee
когда-либо изменится, будет хранить его в таблице где-нибудь, чтобы вы могли обновить его, не находя и не изменяя весь код, который от него зависит.