Nano Hash - криптовалюты, майнинг, программирование

Как перевести полную временную метку в дату в Oracle?

Я пытаюсь использовать 2 метки даты и времени в Oracle, и результат, как и ожидалось, «дд-ммм-гггг», но когда я вычитаю эти 2 даты, я не получаю округленное количество дней между ними, вместо этого у меня есть десятичные знаки.

EXT_DATETIMESTAMP имеет формат: «25-SEP-19 01.35.39.000000000 PM +07:00».

Я использую CAST (EXT_DATETIMESTAMP как дату) для обоих столбцов, и мой результат выглядит следующим образом:

DateA             DateB              DateA - DateB
25-Sep-2019       25-Sep-2019              0
25-Sep-2019       26-Sep-2019             -1.00084490740740740740740740740740740741
25-Sep-2019       27-Sep-2019             -2.00315972222222222222222222222222222222 

Какой тип приведения я должен использовать в этом случае, чтобы получить ожидаемый результат без десятичных знаков?

Спасибо


  • Функция Ude Datediff.. 18.10.2019
  • @KiranPatil DATEDIFF не является допустимой функцией Oracle. 18.10.2019
  • какую базу данных вы используете? 18.10.2019
  • @KiranPatil Посмотрите на теги под вопросом, вы увидите тег oracle. 18.10.2019

Ответы:


1

Тип данных DATE всегда имеет компоненты года, месяца, дня, часа, минуты и секунды.

Тип данных TIMESTAMP всегда имеет одни и те же компоненты, а также может содержать доли секунды и информацию о часовом поясе.

Итак, если вы CAST от TIMESTAMP до DATE, все, что вы делаете, это отбрасываете доли секунды и информацию о часовом поясе; у вас все еще будут часы, минуты и секунды.

Если вам нужны только компоненты года/месяца/дня, не используйте CAST; вместо этого используйте TRUNC, который вернет тип данных DATE, усеченный до полуночи того же дня:

SELECT TimestampA,
       TimestampB,
       TRUNC( TimestampA ) - TRUNC( TimestampB ) AS days_difference
FROM   your_table

Если у вас есть информация о часовом поясе, преобразуйте значения в общий часовой пояс (обычно UTC), а затем усеките их:

Настройка Oracle:

CREATE TABLE your_table ( timestampA, timestampB ) AS
SELECT TIMESTAMP '2019-09-25 07:00:00.000000000 +07:00', TIMESTAMP '2019-09-27 03:00:00.000000000 +04:00' FROM DUAL

Запрос:

SELECT TimestampA,
       TimestampB,
       TimestampA AT TIME ZONE 'UTC' AS utcA,
       TimestampB AT TIME ZONE 'UTC' AS utcB,
       TRUNC( TimestampA AT TIME ZONE 'UTC' ) - TRUNC( TimestampB AT TIME ZONE 'UTC' ) AS days_difference
FROM   your_table

выходы:

TIMESTAMPA                     | TIMESTAMPB                     | UTCA                        | UTCB                        | DAYS_DIFFERENCE
:----------------------------- | :----------------------------- | :-------------------------- | :-------------------------- | --------------:
2019-09-25T07:00:00.000 +07:00 | 2019-09-27T03:00:00.000 +04:00 | 2019-09-25T00:00:00.000 UTC | 2019-09-26T23:00:00.000 UTC |              -1

db‹>скрипка здесь

18.10.2019

2

Используйте TRUNC с обеих сторон разницы:

SELECT
    DateA,
    DateB,
    TRUNC(DateA) - TRUNC(DateB) AS diff
FROM yourTable;

снимок экрана из демонстрации

Демо

18.10.2019

3

Попробуйте ниже запрос...

SELECT TO_DATE('2000-01-05', 'YYYY-MM-DD') -  
       TO_DATE('2000-01-01', 'YYYY-MM-DD') AS DateDiff
FROM   dual
18.10.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..