Как сравнить поля DATETIME «год к доле» и «год к дню» - PullRequest
2 голосов
/ 12 ноября 2010

Я пытаюсь написать выбор, где часть моих критериев сравнивает два поля DATETIME (из двух разных таблиц). Один - это год к фракции, а другой - год к дню. Есть ли способ написать выражение так, чтобы значение года к дроби было сокращено до года? Я не собираюсь укорачивать поле для вывода, скорее оно мне нужно в самой логике для сравнения полей как равных.

Вот разбавленный взгляд на то, к чему я пытаюсь добраться:

SELECT BLAH
  FROM TABLE1 T1
  JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B
                                AND T1.FIELD1 = 100
                                AND T1.TIMESTAMP = T2.WORDERDATE

T1.TIMESTAMP - это год к дроби, T2.WORDERDATE - это год к дню

Буду признателен за любую помощь, если возможно, на очень простом английском языке!

Ответы [ 3 ]

0 голосов
/ 15 ноября 2010

Бимер: у меня есть словарь данных, в котором конкретно указано, что поля представляют собой год от года или год к доле, я также могу визуально увидеть длину поля в базе данных. Поле «год к дню» имеет длину всего десять позиций, где год к доле намного длиннее.

OMG Ponies: База данных на самом деле является базой данных HP Tandem, но данные были реплицированы на сервер Oracle, откуда я собираю информацию.

jon3laze: Я не знаком с CAST, FLOOR или FLOAT, но спасибо за ваш ответ. Я попробую ваш ответ завтра, чтобы посмотреть, смогу ли я заставить его работать. Еще раз спасибо.

0 голосов
/ 21 марта 2013

Я только что попробовал нечто подобное. По крайней мере, для тандема (или HP NonStop) достаточно следующего:

SELECT BLAH
  FROM TABLE1 T1
  JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B
                                AND T1.FIELD1 = 100
                                AND T1.TIMESTAMP YEAR TO DAY = T2.WORDERDATE YEAR TO DAY

При этом обе метки времени будут переведены в «ГОД НА ДЕНЬ», т. Е. В формат «ГГГГ-ММ-ДД».

0 голосов
/ 12 ноября 2010

Можете ли вы их разыграть, а затем сравнить?

SELECT BLAH
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B
                            AND T1.FIELD1 = 100
                            AND CAST(FLOOR(CAST(T1.TIMESTAMP AS FLOAT)) AS DATETIME) = CAST(FLOOR(CAST(T2.WORDERDA AS FLOAT)) AS DATETIME)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...