Sprawdzanie czy data jest większa od ... w MySQL


(blahax99) #1

Nie wiem czy dobry dział, ale wydaje mi się najbardziej odpowiedni.

Mam bazę danych z kolumną “rok” o typie DATETIME. Chcę sprawdzać przy wprowadzaniu danych przez użytkownika czy rok jest większy od 1900. Jak powinienem to zrobić?

Mam coś takiego i to nie działa (samo polecenie się wykonuje, ale przy wprowadzaniu nie wyskakuje nic w stylu “nie możesz dodać tego, bo jest mniejsze niż 1900”):

ALTER TABLE a ADD CONSTRAINT chk_rok CHECK (rok >= '1901-01-01');

Sprawdzałem też:

ALTER TABLE a ADD CHECK (rok >= '1901-01-01');

I też nic…
Z góry dzięki :slight_smile:


(iJuliusz) #2

SELECT rok FROM a

i sprawdzić czy wynik jest większy od 1900

YEAR (Transact-SQL)

Może powinno być tak ?

ALTER TABLE a ADD CHECK (rok >= 1900);
ALTER TABLE a ADD CONSTRAINT chk_rok CHECK (rok >= 1900)

Creating and Modifying CHECK Constraints


(Aranthor) #3

Klauzula CHECK jest ignorowana w MySQL:

The CHECK clause is parsed but ignored by all storage engines.

Zamiast tego można użyć wyzwalaczy:

DELIMITER //
CREATE TRIGGER check_year BEFORE INSERT ON test
	FOR EACH ROW
	BEGIN
		IF YEAR(NEW.date) < 1900 THEN
			SIGNAL SQLSTATE '99999'
				SET MESSAGE_TEXT = 'Rok musi być większy od 1900';
		END IF;
	END;//
DELIMITER ;