简体   繁体   English

普及SQL到Oracle

[英]Pervasive sql to Oracle

I am having trouble converting this Pervasive sql query to Oracle. 我在将这个普及SQL查询转换为Oracle时遇到麻烦。 The errors that oracle is giving me does not help. oracle给我的错误没有帮助。 It is giving me an error at SQL_Date. 它在SQL_Date给我一个错误。

This is what I have in Pervasive: 这是我在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;

This is what I have tried, but it doesn't work: 这是我尝试过的,但是不起作用:

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;

In Oracle CONVERT function translates character string from one character set to another. 在Oracle中,CONVERT函数将字符串从一个字符集转换为另一个字符集。 It cannot be used to convert something to date (does Pervasive means this?) or something. 它不能用于将某些内容转换为日期(Pervasive意味着什么?)或其他内容。 Oracle does not know identifiers SQL_DATE and SQL_CHAR, so you cannot use them in this manner. Oracle不知道标识符SQL_DATE和SQL_CHAR,因此您不能以这种方式使用它们。 And last, conditions like joefdt >= '20000302' are doubtful. 最后, joefdt >= '20000302'条件令人怀疑。 Maybe it means something like joefdt >= DATE '2000-03-02' 也许这意味着类似joefdt >= DATE '2000-03-02'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM