Sub select проблема - PullRequest
       11

Sub select проблема

1 голос
/ 06 апреля 2009

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

По сути, у меня есть что-то похожее ниже, с десятичными датами и в этом формате: CCYYMMDD (то есть, если вы просто выбираете даты, которые они обозначают как CC, YYM, MDD). Дата идет из таблицы 3

SELECT *
FROM TABLE1 A
     CROSS JOIN TABLE2 B
     LEFT OUTER JOIN (SELECT *
                      FROM TABLE3 C 
                      LEFT OUTER JOIN TABLE4 D ON (blah)
                      INNER JOIN TABLE5 E  ON (blah)
                      WHERE DATE >= 20080101
                      AND   DATE <= 20090101
                     ) AS C ON (blah AND blah)

Ответы [ 3 ]

4 голосов
/ 06 апреля 2009

У меня небольшой опыт работы с AS / 400, но ваша проблема в классической игре "разделяй и властвуй".

Изолировать подзапрос - он работает нормально сам по себе? Затем начните с таблицы 1 и убедитесь, что перекрестный запрос работает Затем добавьте в подзапрос.

Я не знаю, поддерживает ли это AS / 400, но общие табличные выражения SQL Server очень полезны - в основном локальные представления. Я упоминаю об этом только потому, что вы можете создать представление, которое было вашим подзапросом для лучшего понимания.

В общем, я подозреваю, что ваша проблема находится в пределах "бла и бла":)

2 голосов
/ 07 апреля 2009

Если вы работаете с родной AS400 db, ее разновидность: DB2 for iSeries (не путать с DB2 для Linux и другими платформами)

Если это так, и поля DATE в таблице 3 являются десятичными числами в формате CCYYMMDD, как вы говорите, ваше сравнение просто отлично. Запятые представляют собой формат, применяемый к десятичным разрядам для отображения и не сохраняются со значениями.

Я согласен с n8wrl, попробуйте просто "выбрать из таблицы 3, где ДАТА> = 20080101" и посмотреть, работает ли он, и найти выход из этого положения.

бла, бла очень обидчивы :) 1007 *

0 голосов
/ 07 апреля 2009

Чтобы правильно ответить на этот вопрос, было бы полезно узнать, с каким «SQL» работает AS400. AS400 сам по себе является просто сервером. AS400 может работать со многими разновидностями баз данных, такими как DB2, MS SQL Server, Oracle и т. Д. *

Чтобы быстро это сделать, не зная, какой SQL-вариант, я бы сказал, вам нужно поместить '' вокруг значений даты, чтобы они не обрабатывались как числовые значения.

ГДЕ ДАТА> = '20080101' И ДАТА <= '20090101' </p>

...