В MariaDB, SUBDATE()
е вградена функция за дата и час, която изважда сума от дадена дата.
Позволява ви да промените дата, като посочите датата, единицата за изваждане и сумата за изваждане. Можете да подадете отрицателна сума, за да добавите до датата, вместо да се изважда от нея.
SUBDATE()
също има синтаксис за пряк път, който ви позволява да посочите дните за изваждане.
Синтаксис
SUBDATE()
функцията има два синтаксиса.
Синтаксис 1:
SUBDATE(expr,days)
Където expr
е датата и days
е броят на дните за изваждане.
Синтаксис 2:
SUBDATE(date,INTERVAL expr unit)
Където date
е датата за промяна, expr
е сумата за изваждане и unit
е единицата дата/час за изваждане (например секунда, минута и т.н.).
Когато използвате този синтаксис, SUBDATE()
е синоним на DATE_SUB()
.
Пример – Синтаксис 1
Ето пример за използване на първия синтаксис:
SELECT SUBDATE('2021-05-01', 1);
Резултат:
+-------------------------+| SUBDATE('2021-05-01', 1) |+--------------------------+| 30.04.2021 г. |+------------------------------+
Можем също да включим частта от време, ако е необходимо:
SELECT SUBDATE('2021-05-01 10:00:00', 1);
Резултат:
+---------------------------------+| SUBDATE('2021-05-01 10:00:00', 1) |+------------------------------ ----+| 2021-04-30 10:00:00 |+----------------------------------+предварително>Ето два алтернативни начина да направите едно и също нещо:
SELECT DATE_SUB('2021-05-01 10:00:00', INTERVAL 1 DAY) AS "Result 1", '2021-05-01 10:00:00' - INTERVAL 1 DAY AS "Result 2";
Резултат:
+---------------------+---------------------+| Резултат 1 | Резултат 2 |+---------------------+---------------------+| 30.04.2021 10:00:00 | 2021-04-30 10:00:00 |+---------------------+---------------- -----+Пример – Синтаксис 2
Ето пример за използване на втория синтаксис:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL 1 HOUR);
Резултат:
+------------------------------------------------------- ---+| SUBDATE('2021-05-31 10:00:00', ИНТЕРВАЛ 1 ЧАС) |+---------------------------- --------------------+| 31.05.2021 09:00:00 |+---------------------------------------------- -----------+Този синтаксис ни позволява да изваждаме други единици от датата (т.е. не само дните). Тук извадих час от датата, но също толкова лесно можех да извадя минути, секунди, месеци, дни, години и т.н. Примери по-късно.
Ето два алтернативни метода за постигане на същия резултат като горния пример:
SELECT DATE_SUB('2021-05-31 10:00:00', INTERVAL 1 HOUR) AS "Result 1", '2021-05-31 10:00:00' - INTERVAL 1 HOUR AS "Result 2";
Резултат:
+---------------------+---------------------+| Резултат 1 | Резултат 2 |+---------------------+---------------------+| 31.05.2021 09:00:00 | 31.05.2021 09:00:00 |+---------------------+---------------- -----+Отрицателни интервали
Предоставянето на отрицателен интервал добавя тази сума към датата.
Пример:
SELECT SUBDATE('2021-05-31 10:00:00', INTERVAL -1 HOUR);
Резултат:
+------------------------------------------------------- ----+| SUBDATE('2021-05-31 10:00:00', ИНТЕРВАЛ -1 ЧАС) |+---------------------------- ---------------------+| 2021-05-31 11:00:00 |+---------------------------------------------- ------------+Други единици
Ето пример, който изважда интервал от 1 от различните единици за дата и час:
SELECT SUBDATE('2021-05-01 10:00:00', INTERVAL 1 YEAR) AS YEAR, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MONTH) AS MONTH, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 DAY) AS DAY, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 HOUR) AS HOUR, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MINUTE) AS MINUTE, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 SECOND) AS SECOND, SUBDATE('2021-05-01 10:00:00', INTERVAL 1 MICROSECOND) AS MICROSECOND;
Резултат (с помощта на вертикален изход):
ГОДИНА:2020-05-01 10:00:00 МЕСЕЦ:2021-04-01 10:00:00 ДЕН:2021-04-30 10:00:00 ЧАС:2021-05-01 09:00:00 МИНУТА:2021-05-01 09:59:00 ВТОРА:2021-05-01 09:59:59 МИКРОСЕКУНДА:2021-05-01 09:59:59,999999Съставни единици
Ето пример, който използва съставни единици:
SELECT SUBDATE('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH", SUBDATE('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND", SUBDATE('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";
Резултат:
+---------------------+---------------------+-- -------------------+| YEAR_MONTH | HOUR_SECOND | DAY_MINUTE |+---------------------+---------------------+--- ------------------+| 01.03.2020 10:00:00 | 01.05.2021 08:34:25 | 2021-05-01 08:30:00 |+---------------------+---------------- -----+---------------------+Нулеви дати
Предаването на
null
за датата връщаnull
:SELECT SUBDATE(null, INTERVAL 1 YEAR);
Резултат:
+--------------------------------+| ПОДДАТА(нула, ИНТЕРВАЛ 1 ГОДИНА) |+--------------------------------+| NULL |+--------------------------------+Липсващ аргумент
Извикване на
SUBDATE()
с грешен брой аргументи или без подаване на аргументи води до грешка:SELECT SUBDATE();
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 1