Извлечь время из TIMESTAMP

Автор Hugin-san, 24 мая 2019, 11:32

0 Пользователи и 1 гость просматривают эту тему.

Hugin-san

Дано: столбец в формате DATETIME.
Задача: извлечь из него только время. Например, все записи с временным промежутком с 4 до 5 утра.

Нашёл в сети несколько возможных вариантов, но в каждом случае база ругается на синтаксис. Пробовал использовать convert -  база возвращает десятичную дробь.

rami

Попробуйте такой запрос ("dt" — столбец в формате DATETIME, "tab" — имя таблицы:
SELECT "dt" FROM "tab" WHERE TO_CHAR("dt", 'H:m') BETWEEN 4 AND 5

Hugin-san

Цитата: rami от 24 мая 2019, 13:02
Попробуйте такой запрос ("dt" — столбец в формате DATETIME, "tab" — имя таблицы:
SELECT "dt" FROM "tab" WHERE TO_CHAR("dt", 'H:m') BETWEEN 4 AND 5
Работает. Огромное спасибо.

Hugin-san

#3
Цитата: rami от 24 мая 2019, 13:02
Попробуйте такой запрос ("dt" — столбец в формате DATETIME, "tab" — имя таблицы:
SELECT "dt" FROM "tab" WHERE TO_CHAR("dt", 'H:m') BETWEEN 4 AND 5
Хотя нет, не до конца работает. С 3 часов ночи до 9 нормально выдаёт, также с 11 до 23 часов.. А вот если вытаюсь выделить другие промежутки - в выборку попадают смешаные результаты. Например, если указать between 1 and 2, то в выборку почему-то попадает 14:00. Пробовал заменить H:m (не нашёл в мануале такого формата) на HH24 - не помогло.

rami

Пробуйте так:
SELECT "dt" FROM "tab" WHERE HOUR("dt") BETWEEN 1 and 2

Hugin-san

Цитата: rami от 24 мая 2019, 16:16
Пробуйте так:
SELECT "dt" FROM "tab" WHERE HOUR("dt") BETWEEN 1 and 2
Удивительно. Спасибо. Я пробовал так сделать раньше, но использовать between не догадался.