sql >> Databáze >  >> RDS >> Mysql

Případ SQL, když FROM(UNIX_TIME)

FROM_UNIXTIME() vrátí hodnotu časového razítka. Z příručky: .

Co může být nyní matoucí, je skutečnost, že časová pásma jsou považována za časové razítko.

Pokud se nacházíte v časovém pásmu GMT+1h, toto

select unix_timestamp('1970-01-01 00:00:00');

vrací

+---------------------------------------+
| unix_timestamp('1970-01-01 00:00:00') |
+---------------------------------------+
|                                     0 |
+---------------------------------------+

Vzhledem k tomu, že se bere v úvahu časové pásmo, toto

select unix_timestamp('1970-01-01 01:00:00');

stále se vrací

+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:00') |
+---------------------------------------+
|                                     0 |
+---------------------------------------+

Ale tohle...

select unix_timestamp('1970-01-01 01:00:01');
+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:01') |
+---------------------------------------+
|                                     1 |
+---------------------------------------+

a toto

select unix_timestamp('1970-01-01 02:00:00');
+---------------------------------------+
| unix_timestamp('1970-01-01 02:00:00') |
+---------------------------------------+
|                                  3600 |
+---------------------------------------+

nyní vrátí "správné" hodnoty.

AKTUALIZACE:

Snadné a rychlé řešení:

SELECT
      CASE
          WHEN t.escalation_time = 0 THEN 0
          WHEN FROM_UNIXTIME( t.escalation_time ) = '1970-01-01 00:00:00' THEN 0
          ELSE FROM_UNIXTIME( t.escalation_time )
      END
FROM ticket t WHERE t.id =1



  1. Duplicitní transakce PHP PDO

  2. Jak zakázat spouštění v Oracle SQL Developer?

  3. Závažná chyba:Nelze otevřít a zamknout tabulky oprávnění:Tabulka 'mysql.host' neexistuje

  4. pgFincore 1.2, rozšíření PostgreSQL