2015-08-03 2 views
0

Я пытаюсь запустить очень простой запрос с даты, которая определена как символ (18), результаты для поля отображаются как 07082015 (для 07/08/15).Char to Date в Oracle

select * 
    from ELECT_REMIT_RESP_HDR_FCT b 
    where b.OFFICE_NBR = '1234' and b.INV_NBR = '123456' 
    b.CRTD_DT = '07082015' 

Я пробовал функцию to_date и получил ошибку, говоря, что месяц недействителен.

+1

Помимо стандартного вопроса о том, почему вы храните дату в столбце с неправильным типом данных и почему вы должны использовать 'char (18)', когда хотите сохраните строку из 8 символов, я не уверен, в чем вопрос. Ваш запрос не работает? Если да, то каким образом? Зачем использовать функцию 'to_date'? –

+0

@ JustinCave, к сожалению, я не создал db и не пытаюсь внести изменения в порядок хранения данных. Запрос, который у меня выше, не возвращает результатов, однако я могу видеть эту дату в результатах, если я удалю дату-часть предложения where. Поэтому я подумал, что, может быть, мне нужно преобразовать дату, как вариант, чтобы попытаться выяснить, получу ли я результаты, нет такой удачи. – tia97

+0

Можете ли вы собрать тестовый пример, демонстрирующий проблему? В идеале что-то на sqlfiddle? Моя догадка заключается в том, что в столбце больше, чем в день (так как иначе 'char (18)' не является глупым). –

ответ

0

Я нашел проблему, хотя она не кажется правдой, она работала и работала! Я просто удалил одинарные кавычки из 07082015.

+1

Удаляя кавычки, вы обрабатываете '07082015' как число, а не строку. Это означает, что Oracle преобразует строковые значения, хранящиеся в столбце, в числа, а затем выполняет сравнение. Как вы говорите, это работает, но на самом деле не так. Я предполагаю, что поле CHAR (18) состоит в том, что оно дополняется пробелами. Интересно, получите ли вы результаты с помощью 'b.CRTD_DT = LPAD ('07082015', 18)' или же с использованием RPAD вместо LPAD или 'TRIM (b.CRTD_DT) = '07082015''. –