Простой вопрос о синтаксисе даты в Oracle SQL - PullRequest
7 голосов
/ 18 ноября 2008

Я пытаюсь преобразовать рабочий запрос MS Access в базу данных Oracle, доступ к которой осуществляется через VB Script (.asp). Это последний раздел предложения WHERE:

sql = sql & "WHERE (UAT.HB.MB_MODE = 'A' AND   UAT.HB.PRINT_DATE >= '" 
& SD & "' AND UAT.HB.PRINT_DATE <= '" & ED  &"'  )"

Переменная «SD» (то есть «дата начала») представляет собой текстовую строку, которая может содержать значение, например «11/11/2008». То же самое касается переменной "ED" (то есть "дата окончания").

Однако даты не работают. Требует ли Oracle особого способа использования дат?

Должны ли даты быть преобразованы? Окружаю ли я их ключевым словом «#», как в MS Access?

Ответы [ 7 ]

17 голосов
/ 18 ноября 2008

В Oracle ваша дата должна быть записана как литерал даты ANSI, например:

DATE '2008-11-11'

Или преобразовать в дату из строки, подобной этой:

TO_DATE('11/11/2008', 'MM/DD/YYYY')

См. здесь

8 голосов
/ 18 ноября 2008

Не думайте, что формат даты Oracle по умолчанию - это что-нибудь. Проверьте NLS_DATE_FORMAT или используйте TO_DATE для его преобразования. Как это:

TO_DATE('2008-11-18 14:13:59', 'YYYY-MM-DD HH24:Mi:SS')

Обратите внимание на «Mi» для минут, а не «MM». Это ловит много людей.

1 голос
/ 18 ноября 2008

в соответствии с этим вы можете использовать следующее:

to_date('19960725','YYYYMMDD')
0 голосов
/ 19 ноября 2008

Не забывайте, что дата включает время (по умолчанию 00:00:00), поэтому
не попадитесь на что-то вроде этого:
учитывая три даты, start_date, print_date, end_date, все в то же самое день
print_date >= start_date AND print_date <= end_date терпит неудачу, потому что print_date было больше, чем end_date :
start_date был 2008-11-19 (00:00:00)
и end_date было 2008-11-19 (00:00:00)
и print_date был 2008-11-19 ( 16: 00: 00 )

0 голосов
/ 18 ноября 2008

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

например: TO_DATE ('11 / 11/2008 17:30 ',' MM / DD / YYYY HH24: MI ')

0 голосов
/ 18 ноября 2008

Вот пара примеров для преобразования в даты и из них:

  • select to_date('2008/11/18:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam') from dual
  • select to_char(sysdate, 'mm/dd/yyyy') from dual
0 голосов
/ 18 ноября 2008

Формат даты по умолчанию для Oracle - "dd-mon-yy". Вы можете использовать функцию TO_CHAR в поле даты, чтобы преобразовать ее в формат, который вы предпочитаете сопоставлять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...