“ORA-00936:缺少表达式”使用OpenQuery链接到Oracle的查询

时间:2012-10-02 20:35:36

标签: sql-server oracle linked-server openquery

我正在尝试执行以下查询:

SELECT *
FROM OPENQUERY
(
    CLP,
    '
        SELECT *
        FROM ORACLE_TABLE
        WHERE [UPDATEDATE] > ''1900-01-01 12:00 AM''
    '
)

当我删除日期条件时,此查询正常工作。但是一旦我试图通过这个标准它就不再有用了。我无法弄清楚我错过了什么。

2 个答案:

答案 0 :(得分:1)

尝试删除[]并添加转换日期:

SELECT * 
FROM OPENQUERY
(CLP, 
      '
         SELECT * 
         FROM ORACLE_TABLE 
         WHERE 
         UPDATEDATE > to_date(''1900-01-01 12:00'',''yyyy-mm-dd hh:mi'')
       '
)

am

SELECT * 
FROM OPENQUERY
(CLP, 
      '
         SELECT * 
         FROM ORACLE_TABLE 
         WHERE 
         UPDATEDATE > to_date(''1900-01-01 12:00 AM'',''yyyy-mm-dd hh:miam '')
       '
)

答案 1 :(得分:0)

使用

SELECT *
FROM OPENQUERY
(CLP,SELECT * FROM ORACLE_TABLE WHERE trunc(UPDATEDATE) > ''01-JAN-1900'')

所有没有时间组件的日期默认为Oracle上午12:00(或00:00小时)。

您也可以使用to_timestamp(UPDATEDATE)但是为了使其工作,该列应该是时间戳类型(即包含时间戳,否则它将始终给出12 AM)。您也可以使用to_char(UPDATEDATE,'YYYY-MM-DD HH:MI AM')