В MariaDB, SYSDATE()
е вградена функция за дата и час, която връща текущата дата и час.
Връща времето, през което функцията е била изпълнена (което може да е различно от времето, в което е изпълнена инструкцията).
Връщаната стойност се връща в 'YYYY-MM-DD HH:MM:SS'
или YYYYMMDDHHMMSS.uuuuuu
формат, в зависимост от това дали функцията се използва в низов или числов контекст.
Връщаната стойност се изразява в текущата часова зона.
Освен това имате възможност да посочите микросекундната точност.
Синтаксис
Синтаксисът е така:
SYSDATE([precision])
Където precision
е незадължителен аргумент, който определя микросекундната точност.
Пример
Ето един пример:
SELECT SYSDATE();
Резултат:
+---------------------+ | SYSDATE() | +---------------------+ | 2021-05-27 08:40:41 | +---------------------+
Числов контекст
Когато SYSDATE()
се използва в числов контекст, резултатът е в YYYYMMDDHHMMSS.uuuuuu
формат.
Пример:
SELECT
SYSDATE(),
SYSDATE() + 0;
Резултат:
+---------------------+----------------+ | SYSDATE() | SYSDATE() + 0 | +---------------------+----------------+ | 2021-05-27 08:41:19 | 20210527084119 | +---------------------+----------------+
Прецизност
Ето пример за определяне на микросекундна точност:
SELECT
SYSDATE(6),
SYSDATE(6) + 0;
Резултат:
+----------------------------+-----------------------+ | SYSDATE(6) | SYSDATE(6) + 0 | +----------------------------+-----------------------+ | 2021-05-27 08:41:44.561665 | 20210527084144.562263 | +----------------------------+-----------------------+
Максималната стойност за микросекундната точност е 6. Ето какво се случва, когато се предаде по-голямо число за точността:
SELECT SYSDATE(12);
Резултат:
ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6
SYSDATE()
срещу NOW()
Въпреки че SYSDATE()
е подобен на NOW()
функция, има разлики.
Една от основните разлики е, че SYSDATE()
връща времето, през което се изпълнява, докато NOW()
връща времето, през което операторът е започнал да се изпълнява. Когато се изпълнява в рамките на съхранена процедура или тригер, NOW()
ще върне времето, през което съхранената процедура или тригерът е започнал да се изпълнява.
Ето пример, който демонстрира тази разлика:
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Резултат (с помощта на вертикален изход):
NOW(): 2021-05-27 08:47:06 SYSDATE(): 2021-05-27 08:47:06 SLEEP(5): 0 NOW(): 2021-05-27 08:47:06 SYSDATE(): 2021-05-27 08:47:11
В този случай използвахме SLEEP()
функция за пауза на обработката за пет секунди преди втората партида функции.
Можем да видим, че вторият път SYSDATE()
е извикана, връщаната му стойност е различна от първия път. NOW()
от друга страна, върна една и съща стойност и двата пъти.
Има няколко други неща, които трябва да имате предвид, когато използвате SYSDATE()
. Например, SET TIMESTAMP
не го засяга (докато прави засяга NOW()
функция). Също така, SYSDATE()
не е безопасно за репликация, ако се използва базирано на изрази двоично регистриране. Въпреки това, има начини да се справите с това, ако е необходимо. Вижте документацията на MariaDB за повече информация.