Heim  >  Fragen und Antworten  >  Hauptteil

Wie vergleiche ich MySQL-Zeittypfelder (genau auf Stunden, Minuten und Sekunden)?

Ich muss Daten basierend auf dem Feld „create_time“ filtern. Jetzt lautet die SQL-Anweisung wie folgt:

SELECT    * FROM    `sbhf_alarm` sa WHERE
unix_timestamp(sa.create_time) BETWEEN unix_timestamp('2016-05-25 14:07:56')
AND unix_timestamp('2017-05-25 14:07:56')

Ich habe jedoch festgestellt, dass diese Methode einen Fehler aufweist. Das heißt, wenn die obere Grenzzeit (Pfeil im Bild oben) zu groß ist, wird ein Fehler gemeldet. Wie unten gezeigt:


Der Grund dafür ist, dass die Funktion unix_timestamp die Zeit in Sekunden umwandelt und die Zeit nicht zu groß sein darf.

Frage: Gibt es eine andere bessere Möglichkeit, die Zeit zu filtern?
Wie wird dieses Problem normalerweise gelöst? Bitte geben Sie mir einen Rat, vielen Dank...

阿神阿神2693 Tage vor866

Antworte allen(2)Ich werde antworten

  • 巴扎黑

    巴扎黑2017-06-06 09:54:27

    UNIX_TIMESTAMP返回的是INTEGER而不是BIGINT,所以不能超过2038年(又一说2106年)。

    为什么不试试 create_time BETWEEN '2016-05-25 14:07:56 AND '2017-05-25 14:07:56' 呢?

    另外,如果追求计算的便捷性,建议时间列类型设为BIGINT,存放以毫秒为单位的Unix时间戳,这样就不会有2038问题了。

    Antwort
    0
  • 世界只因有你

    世界只因有你2017-06-06 09:54:27

    create_time BETWEEN '2016-05-25 14:07:56' AND '2017-05-25 14:07:56'

    如果加上毫秒的话,注意用冒号:,

    create_time BETWEEN '2016-05-25 14:07:56:000' AND '2017-05-25 14:07:56:000'

    Antwort
    0
  • StornierenAntwort