2014-10-28 3 views
3

У меня проблема, которая не решена в течение многих дней, я искал и отвечал за ответ во многих вопросах, похоже, что данные структуры для datetime в моей базе данных настолько странные. Я прочитал этот пост: Select from table by knowing only date without time (ORACLE) , но это не работает на меня. Итак, давайте начнем с этой проблемы,Выберите дату время с условием (Oracle)

Я использую ODBC для подключения данных в базе данных ORACLE для устранения проблем.

Когда я выбираю простой запрос, как это:

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 вы используете? Возможно, драйвер ODBC жалуется на то, что не понимает TO_DATE. –

+2

Согласен. Похоже, ODBC считает, что он связан с другим dbms, а не с Oracle. –

+1

Да, возможно, это проблема, есть идея для этого? cz Я хочу показать данные, отфильтрованные по дате. На самом деле я не могу перейти к базе данных таблицы и посмотреть, какова структура базы данных, я просто использую клиент для выбора данных, но мой босс говорит, что это база данных оракула – Koyix

ответ

1

Мой комментарий «повышен» до надлежащего ответа по запросу:

Ваше сообщение об ошибке показывает, вы используете: [AR System ODBC Driver].

Вы используете источник данных ODBC, который подключается к вашей системе AR, а не напрямую к базе данных Oracle. Это означало бы, что синтаксис запроса должен быть в зависимости от того, какой синтаксис AR System позволяет (хотя база данных Oracle работает «под» AR System.) Поэтому вы получаете ошибку, используя TO_DATE.

Вам нужно либо найти правильный синтаксис для запросов даты в системе AR.

Или вы можете переключиться на драйвер Oracle ODBC и источник данных, но тогда вам, вероятно, понадобятся разные учетные данные для подключения, поскольку вы будете обходить вашу систему AR и напрямую обращаться к базе данных. Это может быть проблема безопасности в вашей настройке.

Я думаю, вы должны спросить кого-то, у кого есть знания системы AR, а не столько знаний Oracle.

EDIT:

Google для "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 System может работать на нескольких различных реляционных баз данных, Oracle является одним из них. Page 23 показывает, что временная метка системы AR сохраняется в Oracle как число. Я почти уверен, что это означает, что когда вы используете драйвер ODBC AR System, вам нужно написать SQL в вызове ODBC в синтаксисе AR System. Затем драйвер системы AR ODBC перезаписывает это для синтаксиса, необходимого во всей реляционной базе данных, на которой установлена ​​система AR.

Таким образом, это подтверждает мое предложение обратиться к разработчикам системы AR, а не к разработчикам Oracle.

+0

Спасибо за ваш ответ, да, я думаю, что это проблема, почему дата игнорирует мой запрос. Но до сих пор трудно найти лучший запрос для фильтрации по дате, я пытался проверить как целое число, так и формат даты и времени, но не работает – Koyix

0

Вы сравниваете дату с буквой. Используйте to_date, чтобы преобразовать литерал на сегодняшний день.

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

trunc будет усекать часть времени. Запрос вернет все строки для этой даты. Для диапазона дат, если вас беспокоит временная часть, удалите trunc.

Если проблема связана с ODBC, то даже если она исправлена, вы получите ошибку, связанную с форматом datetime (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> 

Update я не видел OP уже используется TO_DATE и, таким образом, проблема не кажется, формат даты.

При использовании TO_DATE возникает ошибка. Весьма вероятно, что база данных неOracle, и поэтому функция TO_DATE не распознается в конкретной базе данных.

Проверьте, работает ли select * from v$version.

+0

Он по-прежнему дает сообщение об ошибке: Предупреждение: odbc_exec(): ошибка SQL: [AR System ODBC Driver] Столбец не найден .. – Koyix

+0

Это, похоже, не связано с проблемой, с которой фактически сталкивается OP. Он не учитывает ошибку с 'to_date', они уже ищут диапазон, и обрезание столбца может остановить использование индекса? –

+0

Похоже, проблема различна. Но я беру, когда OP говорит, что нет строк, возвращаемых, хотя это просто из-за буквального. Если соединение ODBC является проблемой, проблема полностью отличается от моего решения. –

Смежные вопросы