В 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 за повече информация.