sql >> Databasteknik >  >> RDS >> Mysql

SQL-fall när FROM(UNIX_TIME)

FROM_UNIXTIME() returnerar ett tidsstämpelvärde. Från manualen: .

Det som kan vara förvirrande nu är det faktum att tidszoner betraktas med tidsstämpel.

Om du är i tidszonen GMT+1h, detta

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

returnerar

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

Eftersom tidszon beaktas, detta

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

återkommer fortfarande

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

Men det här...

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

och detta

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

returnera nu "rätta" värden.

UPPDATERING:

Enkel och snabb lösning:

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. Hur man infogar poster från tabell till en annan utan dubbletter

  2. Hur man skapar utlösare för att lägga till ändringshändelser i granskningsloggtabeller

  3. Hur lagrar man väldigt gamla datum i databasen?

  4. Är denna fråga säker från sql-injektion?