W MariaDB, UNIX_TIMESTAMP()
jest wbudowaną funkcją daty i czasu, która zwraca uniksowy znacznik czasu na podstawie swojego argumentu (lub braku argumentu).
Działa to tak:
- Po wywołaniu bez argument, zwraca uniksowy znacznik czasu (sekundy od ‘1970-01-01 00:00:00’ UTC) jako liczbę całkowitą bez znaku.
- Kiedy dzwonisz z argument, zwraca wartość argumentu w sekundach od ‘1970-01-01 00:00:00’ UTC.
Funkcja odwrotna UNIX_TIMESTAMP()
to FROM_UNIXTIME()
.
Składnia
UNIX_TIMESTAMP()
można wywołać na dwa sposoby:
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
Gdzie date
to ciąg daty, ciąg daty i godziny, znacznik czasu lub liczba w formacie YYMMDD
lub YYYYMMDD
.
Przykład – bez argumentu
Oto przykład wywołania UNIX_TIMESTAMP()
bez argumentu:
SELECT UNIX_TIMESTAMP();
Wynik:
+------------------+ | UNIX_TIMESTAMP() | +------------------+ | 1622502492 | +------------------+
To mówi nam, że kiedy uruchomiłem to oświadczenie, od 1970-01-01 00:00:00 minęło 1622502492 sekund.
Przykład – z argumentem
Oto przykład z argumentem:
SELECT UNIX_TIMESTAMP('1970-01-02');
Wynik:
+------------------------------+ | UNIX_TIMESTAMP('1970-01-02') | +------------------------------+ | 50400 | +------------------------------+
W poniższym przykładzie wywołuję UNIX_TIMESTAMP()
dwa razy; raz bez argumentu, a raz z NOW()
jako argument.
SELECT
UNIX_TIMESTAMP(),
UNIX_TIMESTAMP(NOW());
Wynik:
+------------------+-----------------------+ | UNIX_TIMESTAMP() | UNIX_TIMESTAMP(NOW()) | +------------------+-----------------------+ | 1622502678 | 1622502678 | +------------------+-----------------------+
Ciąg daty i godziny
W powyższym przykładzie NOW()
zwraca wartość daty i godziny.
W tym przykładzie jawnie podaję ciąg daty i godziny:
SELECT UNIX_TIMESTAMP('2020-10-30 10:23:47');
Wynik:
+---------------------------------------+ | UNIX_TIMESTAMP('2020-10-30 10:23:47') | +---------------------------------------+ | 1604017427 | +---------------------------------------+
Mikrosekundy
UNIX_TIMESTAMP()
obsługuje mikrosekundy:
SELECT UNIX_TIMESTAMP('2020-10-30 10:23:47.123456');
Wynik:
+----------------------------------------------+ | UNIX_TIMESTAMP('2020-10-30 10:23:47.123456') | +----------------------------------------------+ | 1604017427.123456 | +----------------------------------------------+
Daty numeryczne
Obsługiwane są daty numeryczne:
SELECT UNIX_TIMESTAMP(20201030);
Wynik:
+--------------------------+ | UNIX_TIMESTAMP(20201030) | +--------------------------+ | 1603980000 | +--------------------------+
Nieprawidłowy argument
Po przekazaniu jakichkolwiek nieprawidłowych argumentów, UNIX_TIMESTAMP()
zwraca null
z ostrzeżeniem:
SELECT UNIX_TIMESTAMP('Homer');
Wynik:
+-------------------------+ | UNIX_TIMESTAMP('Homer') | +-------------------------+ | NULL | +-------------------------+ 1 row in set, 1 warning (0.001 sec)
Sprawdź ostrzeżenie:
SHOW WARNINGS;
Wynik:
+---------+------+-------------------------------+ | Level | Code | Message | +---------+------+-------------------------------+ | Warning | 1292 | Incorrect time value: 'Homer' | +---------+------+-------------------------------+
Zbyt wiele argumentów
Wywołanie UNIX_TIMESTAMP()
zbyt wiele argumentów powoduje błąd:
SELECT UNIX_TIMESTAMP('1970-01-02', '1970-01-03');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNIX_TIMESTAMP'