mysql выбирает метки времени между a и b, возвращая все или 0 меток времени

mysql timestamp

8205 просмотра

2 ответа

Пробовал это

select * from table where timestamp_field between 1330560000 and 1336170420

и это

select * from table where timestamp_field >=1330560000 and timestamp_field<=1336170420

оба возвращают пустой набор результатов.

Но это

select * from table where timestamp_field >= 1330560000

возвращает все строки

Чтобы сделать вещи более абсурдными

select * from table where timestamp_field <= 1336170420

возвращает пустой набор результатов.

Конечно, существуют значения меток времени до, между и после 1336170420 = 4 мая 2012 года и 1330560000 = 1 марта 2012 года.

Значения отметки времени в порядке, по крайней мере phpmyadmin показывает правильные (читаемые человеком) значения даты и времени. Я создал временные метки, анализируя строки, с

UPDATE table SET timestamp_field = STR_TO_DATE(timestamp_string, '%d.%m.%Y')

Думаю, я что-то упустил, но не могу найти что?

Автор: Prvul Источник Размещён: 12.11.2019 09:55

Ответы (2)


6 плюса

Решение

MySQL ожидает литералы даты , а не целые:

SELECT *
FROM   table
WHERE  DATE(timestamp_field) BETWEEN '2012-03-01' AND '2012-05-04'

Чтобы использовать целые числа (предполагая, что они являются секундами с начала эпохи UNIX), сначала преобразуйте их, используя FROM_UNIXTIME()функцию MySQL :

SELECT *
FROM   table
WHERE  timestamp_field BETWEEN FROM_UNIXTIME(1330560000)
                           AND FROM_UNIXTIME(1336170420)

Или используйте UNIX_TIMESTAMP()для преобразования вашего столбца в представление UNIX:

SELECT *
FROM   table
WHERE  UNIX_TIMESTAMP(timestamp_field) BETWEEN 1330560000 AND 1336170420
Автор: eggyal Размещён: 04.06.2012 09:16

0 плюса

почему бы не конвертировать временные метки из unixtime (timestamp / 1000) в dateTime при использовании вашего sql-кода? ты пробовал это?

Автор: Fonzy Размещён: 04.06.2012 08:59
Вопросы из категории :
32x32