sql >> Database >  >> RDS >> MariaDB

Hoe UNIX_TIMESTAMP() werkt in MariaDB

In MariaDB, UNIX_TIMESTAMP() is een ingebouwde datum- en tijdfunctie die een Unix-tijdstempel retourneert, gebaseerd op zijn argument (of gebrek aan argument).

Het werkt als volgt:

  • Wanneer gebeld zonder een argument, retourneert het een Unix-tijdstempel (seconden sinds '1970-01-01 00:00:00' UTC) als een geheel getal zonder teken.
  • Wanneer gebeld met een argument, retourneert het de waarde van het argument als seconden sinds '1970-01-01 00:00:00' UTC.

De inverse functie van UNIX_TIMESTAMP() is FROM_UNIXTIME() .

Syntaxis

UNIX_TIMESTAMP() kan op de volgende twee manieren worden aangeroepen:

UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)

Waar date is een datumstring, een datetime string, een tijdstempel of een getal in de notatie YYMMDD of YYYYMMDD .

Voorbeeld – Zonder argument

Hier is een voorbeeld van het aanroepen van UNIX_TIMESTAMP() zonder argument:

SELECT UNIX_TIMESTAMP();

Resultaat:

+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1622502492 |
+------------------+

Dit vertelt ons dat toen ik die verklaring uitvoerde, er 1622502492 seconden waren verstreken sinds 01-01-70 00:00:00.

Voorbeeld – Met een argument

Hier is een voorbeeld met een argument:

SELECT UNIX_TIMESTAMP('1970-01-02');

Resultaat:

+------------------------------+
| UNIX_TIMESTAMP('1970-01-02') |
+------------------------------+
|                        50400 |
+------------------------------+

In het volgende voorbeeld roep ik UNIX_TIMESTAMP() . aan tweemaal; één keer zonder argument, en één keer met NOW() als het argument.

SELECT 
    UNIX_TIMESTAMP(),
    UNIX_TIMESTAMP(NOW());

Resultaat:

+------------------+-----------------------+
| UNIX_TIMESTAMP() | UNIX_TIMESTAMP(NOW()) |
+------------------+-----------------------+
|       1622502678 |            1622502678 |
+------------------+-----------------------+

Datum-tekenreeks

In het bovenstaande voorbeeld, NOW() geeft een datetime-waarde terug.

In dit voorbeeld geef ik expliciet een datetime string op:

SELECT UNIX_TIMESTAMP('2020-10-30 10:23:47');

Resultaat:

+---------------------------------------+
| UNIX_TIMESTAMP('2020-10-30 10:23:47') |
+---------------------------------------+
|                            1604017427 |
+---------------------------------------+

Microseconden

UNIX_TIMESTAMP() ondersteunt microseconden:

SELECT UNIX_TIMESTAMP('2020-10-30 10:23:47.123456');

Resultaat:

+----------------------------------------------+
| UNIX_TIMESTAMP('2020-10-30 10:23:47.123456') |
+----------------------------------------------+
|                            1604017427.123456 |
+----------------------------------------------+

Numerieke datums

Numerieke datums worden ondersteund:

SELECT UNIX_TIMESTAMP(20201030);

Resultaat:

+--------------------------+
| UNIX_TIMESTAMP(20201030) |
+--------------------------+
|               1603980000 |
+--------------------------+

Ongeldig argument

Bij het doorgeven van ongeldige argumenten, UNIX_TIMESTAMP() retourneert null met een waarschuwing:

SELECT UNIX_TIMESTAMP('Homer');

Resultaat:

+-------------------------+
| UNIX_TIMESTAMP('Homer') |
+-------------------------+
|                    NULL |
+-------------------------+
1 row in set, 1 warning (0.001 sec)

Controleer de waarschuwing:

SHOW WARNINGS;

Resultaat:

+---------+------+-------------------------------+
| Level   | Code | Message                       |
+---------+------+-------------------------------+
| Warning | 1292 | Incorrect time value: 'Homer' |
+---------+------+-------------------------------+

Te veel argumenten

Aanroepen van UNIX_TIMESTAMP() met te veel argumenten resulteert in een fout:

SELECT UNIX_TIMESTAMP('1970-01-02', '1970-01-03');

Resultaat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNIX_TIMESTAMP'

  1. Incrementele statistieken worden NIET gebruikt door de Query Optimizer

  2. Hoe voer je dezelfde aggregatie uit op elke kolom, zonder de kolommen op te sommen?

  3. Fix "Kan niet installeren in Homebrew op ARM-processor in Intel standaard prefix (/usr/local)!"

  4. Hoe MySQL-client automatisch opnieuw verbinden met MySQLdb inschakelen?