Как я могу сравнить это два timestamp
в Oracle SQLСравните два метку времени в Oracle
- Date1 = 1420042143
- Дата2 = 1412176143
SELECT * FROM my_table WHERE my_table.date BETWEEN Date1 AND Date2
Как я могу сравнить это два timestamp
в Oracle SQLСравните два метку времени в Oracle
SELECT * FROM my_table WHERE my_table.date BETWEEN Date1 AND Date2
Предполагая, что это Unix-типа временные метки на основе эпох, хранящиеся как числа, а не настоящие временные метки Oracle/SQL, которые вы форматируете нечетным образом, то, что вы показали, будет работать; кроме того, как вы его показали, значения неправильны. From the documentation:
Если expr3 < expr2, то интервал пуст.
В качестве значения Date1
вы используете, как нижняя граница выше что значение Date2
вы используете в качестве верхней границы, вы не увидите каких-либо данных, даже если какие-либо строки имеют значения ваш диапазон, если вы не обменять их на:
SELECT * FROM my_table WHERE my_table.date BETWEEN Date2 AND Date1
Если вы получаете эти формы в другом месте и не знаю, какой будет выше, вы можете использовать хотя бы и самый большой для работы это:
SELECT * FROM my_table
WHERE my_table.date BETWEEN LEAST(Date1, Date2) AND GREATEST(Date1, Date2)
Также обратите внимание, что between
включительно. С некоторыми выборкой данными:
CREATE TABLE my_table(epoch NUMBER);
INSERT INTO my_table(epoch) VALUES (1412176143);
INSERT INTO my_table(epoch) VALUES (1417584134);
INSERT INTO my_table(epoch) VALUES (1420042143);
эквивалентом исходного запроса не находит данных:
SELECT * FROM my_table WHERE epoch BETWEEN 1420042143 AND 1412176143;
no rows selected
реверс значения находит данные, включая верхние и нижние себя обязанное значение:
SELECT * FROM my_table WHERE epoch BETWEEN 1412176143 AND 1420042143;
EPOCH
----------
1412176143
1417584134
1420042143
Не хранить метки времени с использованием типа данных TIMESTAMP - вот такая плохая идея. – BobC
Я могу быть в порядке с сохранением эпох, так как вы можете хотя бы ограничить их и знать, что они действительны; но только если есть веская причина (например, данные, поступающие в/из других платформ), и даже тогда у меня возникнет соблазн сохранить реальный эквивалент даты/времени в любом случае - возможно, как виртуальный столбец. Это другая величина неправильного хранения, например, для строк. Но да, соглашайтесь в общем, избегайте, если это возможно. –
Да, строка или форматированный номер - это тот, которого действительно следует избегать. – BobC
В чем проблема с запросом, который вы указали? Кроме того, что у вас их не так? –
Какими типами данных являются эти значения? Понятно, что они не являются ДАТЫ Oracle или TIMESTAMP. И что не так с выражением SQL, которое вы показали? –