2015-03-17 3 views
0

У меня возникли проблемы с преобразованием этого Pervasive sql-запроса в Oracle. Ошибки, которые дает мне оракул, не помогают. Это дает мне ошибку в SQL_Date.Pervasive sql to Oracle

Это то, что я имею в Pervasive:

SELECT 
    (CASE 
     WHEN joefdt = 0 
     THEN NULL 
     WHEN joefdt > 0 
     THEN CONVERT(LEFT(CONVERT(joefdt, SQL_CHAR),4) + '-' + RIGHT(LEFT(CONVERT(joefdt, SQL_CHAR),6),2) + '-' + RIGHT(CONVERT(joefdt, SQL_CHAR),2),SQL_DATE) END) AS EFFECTIVEDATE, 
    (CASE 
     WHEN jopost = 0 
     THEN NULL 
     WHEN jopost > 0 
     THEN CONVERT(LEFT(CONVERT(jopost, SQL_CHAR),4) + '-' + RIGHT(LEFT(CONVERT(jopost, SQL_CHAR),6),2) + '-' + RIGHT(CONVERT(jopost, SQL_CHAR),2),SQL_DATE) END) AS POSTDATE, 
    (SELECT ltrim(rtrim(cdname)) from money.code WHERE cdtabl = 3 AND cdnumb = joetyp) AS TYPE, 
    (SELECT ltrim(rtrim(cdname)) from money.code WHERE cdtabl = 5 AND cdnumb = jodelm) AS DELIVERYMETHOD, 
    joissd AS SHARESISSUED, jocand AS SHARESCANCELLED , joprsn AS BROKERID, joprsn AS TRANSACID 
FROM money.jour 
WHERE joiss = 1 AND joetyp in (2,3,4) AND (JOISSD > 0 OR JOCAND > 0) 
    AND joefdt >= '19920127' AND joefdt <= '20040726' 
ORDER BY joefdt; 

Это то, что я пытался, но он не работает:

SELECT 
    (CASE 
     WHEN joefdt = 0 
     THEN NULL 
     WHEN joefdt > 0 
     THEN CONVERT(substr(CONVERT(joefdt, SQL_CHAR),4) + '-' + RIGHT(LEFT(CONVERT(joefdt, SQL_CHAR),6),2) + '-' + RIGHT(CONVERT(joefdt, SQL_CHAR),2),SQL_DATE) END) AS EFFECTIVEDATE, 
    (CASE 
     WHEN jopost = 0 
     THEN NULL 
     WHEN jopost > 0 
     THEN CONVERT(substr(CONVERT(jopost, SQL_CHAR),4) + '-' + RIGHT(LEFT(CONVERT(jopost, SQL_CHAR),6),2) + '-' + RIGHT(CONVERT(jopost, SQL_CHAR),2),SQL_DATE) END) AS POSTDATE, ----Error at SQL_DATE 
    (SELECT ltrim(rtrim(cdname)) from money.code WHERE cdtabl = 3 AND cdnumb = joetyp) AS TYPE, 
    (SELECT ltrim(rtrim(cdname)) from money.code WHERE cdtabl = 5 AND cdnumb = jodelm) AS DELIVERYMETHOD, 
    joissd AS SHARESISSUED, jocand AS SHARESCANCELLED , joprsn AS BROKERID, joprsn AS TRANSACID 
FROM money.jour 
WHERE joiss = 1 AND joetyp in (2,3,4) AND (JOISSD > 0 OR JOCAND > 0) 
    AND joefdt >= '20000302' AND joefdt <= '20000302' 
ORDER BY joefdt; 

ответ

1

В Oracle функции CONVERT преобразует строку символов из одного символа установить на другое. Его нельзя использовать, чтобы преобразовать что-то на сегодняшний день (значит ли это Pervasive это?) Или что-то еще. Oracle не знает идентификаторы SQL_DATE и SQL_CHAR, поэтому вы не можете использовать их таким образом. И последнее, условия вроде joefdt >= '20000302' сомнительны. Возможно, это означает что-то вроде joefdt >= DATE '2000-03-02'