2015-09-01 2 views
1

Я пытаюсь выбрать из таблицы с двумя датами, датами начала и окончания в Oracle 11g. я писал:Использование дат в Coldfusion 1 и Oracle 11g

 SELECT * 
     FROM mytable 
     WHERE date_received BETWEEN <cfqueryparam cfsqltype="cf_sql_date" 
     value="#CreateODBCDate(Form.startDate)#"> 
     AND <cfqueryparam cfsqltype="cf_sql_date" 
     value="#CreateODBCDate(Form.EndDate)#"> 

Я получил сообщение об ошибке:
Ошибка Выполнение запроса базы данных. [Macromedia] [Драйвер Oracle JDBC] Ошибка конверсии. Параметр даты или времени недоступен. Когда я вхожу StartDate: 09122014 & дата окончания: 09122015 я: Дата начала: {d '26875-03-22'} дата конец: {d '27176-05-24'}

Тогда я попытался to_date функция Oracle 11g:

 SELECT * 
     FROM mytable 
     WHERE date_received BETWEEN <cfqueryparam 
     cfsqltype="cf_sql_date" value="#to_date(Form.startDate, 
     'DD-MM-YY')#"> 
     AND <cfqueryparam cfsqltype="cf_sql_date" 
     value="#to_date(Form.EndDate, 'DD-MM-YY')#"> 

Я получил эту ошибку: переменная to_date не определен

Как я могу сделать выбор в ColdFusion с Oracle 11g обратно конец? У меня не было этой проблемы, когда они все еще используют Sybase.

ответ

1

When I enter startdate: 09122014

CreateODBCDate() ожидает действительную дату объекта. Технически он принимает дату строки, но, как и в большинстве преобразований CF-auto-magic-string-to-date-object, вы застряли, однако CF выбирает интерпретацию входных строк. В этом случае CF интерпретирует 09122014 числовое представление объекта даты или 9122014 дней с эпохи CF, то есть {d '26875-03-22'}.

Если вы решили положиться на автоматическое преобразование CF, то строки даты должны быть отформатированы в соответствии со стандартными соглашениями по времени в США, например «мм/дд/гггг» или «гггг-мм-дд». Оба формата приведут к правильному результату. Использование жесткого закодированное значения для иллюстрации:

<cfqueryparam cfsqltype="cf_sql_date" value="#CreateODBCDate('09/12/2014')#"> 

Сказав, что функции даты CF, как известно, щедры они считают «дату». IMO, вам лучше проверить строки и создать свои собственные объекты даты с помощью CreateDate().

to_date variable is not defined

TO_DATE - это функция Oracle. CF ничего не знает о ваших функциях dbms. Они должны быть размещены вне тега cfqueryparam. Кроме того, функция ожидает строку в указанном формате маски. Что-то вроде этого:

TO_DATE( <cfqueryparam value="09122014" cfsqltype="cf_sql_varchar"> 
     , 'MMDDYYYYY' 
     ) 
+0

Я хочу поблагодарить вас за отзыв. Я никогда не знаю, что могу сделать: TO_DATE ( , 'MMDDYYYYY' ) – MGL

+0

Добро пожаловать. Даже если вы решите пойти с TO_DATE, вы должны все еще проверить входную строку в CF перед запросом. Не нужно тратить вызов db, если строка завершится с ошибкой TO_DATE. – Leigh

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