2014-10-28 61 views
3

我有問題,多天沒有解決,我一直在尋找並遵循許多問題的答案,它似乎像我的數據庫中的日期時間結構數據很奇怪。我讀過這篇文章:Select from table by knowing only date without time (ORACLE) 但它不適合我。 好吧,讓我們開始討論這個問題,選擇帶條件的日期時間(甲骨文)

使用ODBC連接來獲取ORACLE Database for Remedy Client中的數據。

當我像這樣簡單的查詢選擇:

select Create_Date from HPD_Help_Desk_SLA 

它的結果是:

Create_Date 
2014-07-01 05:27:02.000 
2014-07-02 05:27:02.000 

但是當我嘗試此查詢:

select Create_Date from HPD_Help_Desk_SLA where Create_Date >= TO_DATE('2014-05-03', 'YYYY-MM-DD') AND Create_Date < TO_DATE('2014-08-04', 'YYYY-MM-DD') 

它的結果是:

Warning: odbc_exec(): SQL error: [AR System ODBC Driver]Column not found: ., SQL state S0000 in SQLExecDirect in.... 

,我嘗試了這種簡單的查詢:

select Create_Date from HPD_Help_Desk_SLA where Create_Date <= '2014-08-04' 

select Create_Date from HPD_Help_Desk_SLA where Create_Date like '2014-07-01%`' 

,這不顯示任何

任何想法呢? 謝謝

+2

您正在使用哪種ODBC驅動程序?它可能是抱怨不瞭解TO_DATE的ODBC驅動程序。 – 2014-10-28 07:45:08

+2

我同意。它看起來像ODBC認爲它連接到另一個dbms,而不是Oracle。 – 2014-10-28 07:51:14

+1

是的,也許這就是問題所在,對此有什麼想法? cz我想顯示按日期過濾的數據。 其實我不能去表數據庫,看看數據庫是什麼結構,我只是使用客戶端來選擇數據,但我的老闆說它是oracle數據庫 – Koyix 2014-10-28 07:55:40

回答

1

我的評論「升級」到一個合適的回答:

你的錯誤消息顯示您正在使用:[AR System ODBC Driver]

您正在使用連接到您的AR系統而不是直接連接到Oracle數據庫的ODBC數據源。這意味着查詢語法必須是AR System允許的語法(即使Oracle數據庫在「AR System」下面運行)。因此,使用TO_DATE時會出錯。

您或者需要爲AR系統中的日期查詢找出適當的語法。

或者您可以切換到Oracle ODBC驅動程序和數據源,但您可能需要不同的連接憑證,因爲您將繞過AR System並直接轉到數據庫。這可能是您安裝中的安全問題。

我想你應該問一個具有AR系統知識的人,而不是那麼多的Oracle知識。

編輯:

谷歌爲"AR System" "Oracle"給出了這樣的引用作爲第一擊:

http://www.unc.edu/remedy/clients/7.0.1/BMC%20Remedy%20AR%20System%20Server%207-0-01/Database-Ref-700.pdf

爲參考手冊顯示瞭如何將AR系統可以在幾個不同的關係數據庫上運行,甲骨文是一個其中。第23頁顯示了一個AR系統「時間戳」作爲一個數字保存在Oracle中。我幾乎可以肯定,這意味着當您使用AR System ODBC驅動程序時,您需要在AR System語法中的ODBC調用中編寫SQL。然後,AR System ODBC驅動程序將其重寫爲AR System安裝在任何關係數據庫中所需的語法。

因此它強化了我的建議,要求AR System開發人員而不是Oracle開發人員。

+0

謝謝你的迴應,是的,我認爲這是爲什麼日期忽略我的查詢的問題。但直到現在很難找到最好的查詢按日期過濾,我一直在嘗試檢查整數和日期時間格式,仍然無法正常工作 – Koyix 2014-10-29 02:59:51

0

你正在比較日期與字面。使用to_date將文字轉換爲日期。

where Create_Date = to_date('2014-08-04', 'YYYY-MM-DD')

trunc將截斷時間部分。該查詢將返回該日期的所有行。對於日期範圍,如果您擔心時間部分,請刪除trunc。

如果問題與ODBC有關,那麼即使它是固定的,也會得到與日期時間格式有關的錯誤(ii數據類型爲DATE)。這取決於你的NLS_DATE_FORMAT

例如,

SQL> SELECT empno, ename, hiredate FROM emp WHERE hiredate <='20/02/1981'; 
SELECT empno, ename, hiredate FROM emp WHERE hiredate <='20/02/1981' 
                 * 
ERROR at line 1: 
ORA-01843: not a valid month 


SQL> 

但是,與隱式轉換,下一個查詢將執行。

SQL> SELECT empno, ename, hiredate FROM emp WHERE hiredate <='20-FEB-1981'; 

    EMPNO ENAME  HIREDATE 
---------- ---------- --------- 
     7369 SMITH  17-DEC-80 
     7499 ALLEN  20-FEB-81 

SQL> 

所以,爲了安全起見,

SQL> SELECT empno, ename, hiredate FROM emp WHERE hiredate <=to_date('20-FEB-1981','DD-MON-YYYY'); 

    EMPNO ENAME  HIREDATE 
---------- ---------- --------- 
     7369 SMITH  17-DEC-80 
     7499 ALLEN  20-FEB-81 

SQL> 

更新我沒有看到OP已經使用TO_DATE,因此這個問題似乎並沒有成爲日期格式。如果使用TO_DATE,則會發生錯誤。數據庫很可能是而不是Oracle,因此TO_DATE功能在特定數據庫中不被識別。

檢查是否select * from v$version適合你。根據要求

+0

它仍然給出錯誤:警告:odbc_exec():SQL錯誤:[AR系統ODBC驅動程序]列未找到。 – Koyix 2014-10-28 07:52:29

+0

這似乎與OP實際上存在的問題沒有關係。它沒有用'to_date'解決錯誤,它們已經在搜索範圍,截斷列可能會停止正在使用的索引? – 2014-10-28 08:11:02

+0

似乎問題是不同的。但我的觀點是,當OP說沒有行返回時,我認爲它只是因爲字面意思。如果ODBC連接是問題,那麼問題與我的解決方案完全不同。 – 2014-10-28 08:13:31