Сравнение значений типа DATE - Oracle - PullRequest
1 голос
/ 07 марта 2011

Есть ли способ сравнения значений даты, чтобы проверить, является ли один перед другим? Например, как мне узнать, что появилось первым в следующих строках

SEQ   CREATION_DTM
--------------------
234   2011-03-26 22:59:03
235   2011-03-26 22:59:03

Столбец для вышеуказанных данных объявляется как тип данных DATE. После прочтения выясняется, что тип данных DATE не хранит миллисекунды. Это значит я не могу сравнить две вышеуказанные даты, чтобы узнать, какая из них раньше другой?

EDIT

Я использую Oracle 10G в Solaris.

Ответы [ 3 ]

5 голосов
/ 07 марта 2011
Точность

DATE идет только с точностью до секунды, поэтому, если у вас есть две даты, одинаковые с такой точностью, вы не сможете различить или упорядочить их. Чтобы получить больше точности, вам нужно сохранить их как TIMESTAMP.

В более общем случае, когда даты отличаются, вы можете сравнивать и упорядочивать их, как числа. Когда вы получаете два одинаковых, результаты неясны; в вашем случае, если вы заказали CREATION_DTM, вы не могли бы с уверенностью предсказать, будут ли результаты упорядочены как 234,235 или 235,234. Вам нужно будет определить способ разорвать связь, как предложил Джастин.

3 голосов
/ 07 марта 2011

ДАТА сохраняется только до секунды. Таким образом, если две строки вставляются в одну и ту же секунду, вы не можете определить, какая из них пришла первой, на основе столбца CREATION_DTM. Если вам нужен такой уровень разрешения, вам лучше использовать столбец TIMESTAMP [WITH [LOCAL] TIME ZONE], в котором временная составляющая будет храниться до 9 десятичных цифр, если операционная система хоста обеспечивает такой уровень детализации (большинство систем Unix обеспечивают микросекундное разрешение) .

В вашем случае, если вы не используете RAC и используете последовательность Oracle для заполнения столбца SEQ, вы можете использовать этот столбец для разрыва связи. Если две строки были вставлены в разные транзакции, не были обновлены, и таблица была построена с ROWDEPENDENCIES, вы также могли бы потенциально использовать ORA_ROWSCN, чтобы разорвать связь.

0 голосов
/ 08 марта 2011

Кажется, тип данных метки времени будет соответствовать вашему запросу. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...