2017-02-20 5 views
-2

Как я могу сравнить это два timestamp в Oracle SQLСравните два метку времени в Oracle

  • Date1 = 1420042143
  • Дата2 = 1412176143

SELECT * FROM my_table WHERE my_table.date BETWEEN Date1 AND Date2

+1

В чем проблема с запросом, который вы указали? Кроме того, что у вас их не так? –

+1

Какими типами данных являются эти значения? Понятно, что они не являются ДАТЫ Oracle или TIMESTAMP. И что не так с выражением SQL, которое вы показали? –

ответ

1

Предполагая, что это 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 
+0

Не хранить метки времени с использованием типа данных TIMESTAMP - вот такая плохая идея. – BobC

+0

Я могу быть в порядке с сохранением эпох, так как вы можете хотя бы ограничить их и знать, что они действительны; но только если есть веская причина (например, данные, поступающие в/из других платформ), и даже тогда у меня возникнет соблазн сохранить реальный эквивалент даты/времени в любом случае - возможно, как виртуальный столбец. Это другая величина неправильного хранения, например, для строк. Но да, соглашайтесь в общем, избегайте, если это возможно. –

+0

Да, строка или форматированный номер - это тот, которого действительно следует избегать. – BobC

Смежные вопросы