Różnica między SUBDATE()
MySQL i DATE_SUB()
funkcje są dokładnie takie same, jak różnica między ADDDATE()
i DATE_ADD()
Funkcje. Jedna funkcja pozwala na dwie różne formy składni, podczas gdy druga pozwala na tylko jedną.
Ten artykuł pokazuje różnicę.
Składnia
Oto składnia każdej funkcji.
DATE_SUB()
DATE_SUB()
składnia wygląda tak.
DATE_SUB(date,INTERVAL expr unit)
Akceptuje wartość daty, po której następuje INTERVAL
słowo kluczowe oraz wyrażenie i jednostkę, dla której należy odjąć od daty podanej w pierwszym argumencie.
SUBDATE()
SUBDATE()
składnia pozwala na dwie formy. Możesz użyć jednego z następujących formularzy.
SUBDATE(date,INTERVAL expr unit)
Lub
SUBDATE(expr,days)
Pierwsza forma jest dokładnie taka sama jak DATE_SUB()
składnia, a kiedy używasz tej składni, SUBDATE()
funkcja jest synonimem DATE_SUB()
.
Jednak druga forma składni jest dostępna tylko podczas korzystania z SUBDATE()
funkcji i pozwala na użycie skróconego sposobu określenia liczby dni do odjęcia od daty.
Przykład
Oto przykład użycia obu funkcji do odjęcia określonej liczby dni od tej samej daty.
SET @date = '2023-12-10'; SELECT DATE_SUB(@date, INTERVAL 5 DAY) AS 'DATE_SUB', SUBDATE(@date, INTERVAL 5 DAY) AS 'SUBDATE 1', SUBDATE(@date, 5) AS 'SUBDATE 2';
Wynik:
+------------+------------+------------+ | DATE_SUB | SUBDATE 1 | SUBDATE 2 | +------------+------------+------------+ | 2023-12-05 | 2023-12-05 | 2023-12-05 | +------------+------------+------------+
Jeśli jednak spróbujemy użyć alternatywnej formy składni z DATE_SUB()
otrzymujemy błąd.
SET @date = '2023-12-10'; SELECT DATE_SUB(@date, 5) AS 'DATE_SUB 2';
Wynik:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5) AS 'DATE_SUB 2'' at line 1
I oczywiście przyczyną tego błędu jest to, że DATE_SUB()
nie obsługuje tej składni.
Pamiętaj, że ta druga forma składni może być używana tylko do odejmowania dni od daty. Jeśli chcesz odjąć jakąkolwiek inną jednostkę (na przykład miesiące), musisz użyć pierwszej składni.