sql >> データベース >  >> RDS >> Mysql

FROM(UNIX_TIME)の場合のSQLの場合

    FROM_UNIXTIME() タイムスタンプ値を返します。 マニュアルから:

    今混乱しているのは、タイムゾーンがタイムスタンプで考慮されているという事実です。

    グリニッジ標準時GMT+1時間帯の場合、これは

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

    返品

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

    タイムゾーンが考慮されているので、これは

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

    まだ戻ります

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

    しかし、これは...

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

    そしてこれ

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

    「正しい」値を返すようになりました。

    更新:

    簡単で迅速な解決策:

    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. javafxのデータベースから表示するデータのフィルタリング

    2. intをfloatに変更します(mysql)

    3. mysqlの1つのテーブルから他の1つのテーブルへの複数の外部キー

    4. プリペアドステートメントを使用したMySQLのLIMITキーワード