Как вы будете обрабатывать значения дат, хранящиеся в полях varchar? - PullRequest
1 голос
/ 07 октября 2010

Ваш пользователь хочет, чтобы отчет был отсортирован по дате.Этот отчет создается с использованием C # и ODP.NET. Вы выполняете сортировку по столбцу «Дата», и вывод не соответствует ожиданиям пользователя.

При ближайшем рассмотрении вы обнаружите, что столбец даты - это varchar2поле.Значения в столбце хранятся в формате DD-MON-YY "01-JAN-10".

Как вы отсортируете его по дате?

Myответ:

select TO_DATE(fakedatecolumn,'DD-MON-YY') from table ORDER BY TO_DATE(fakedatecolumn,'DD-MON-YY')

Есть ли что-то, что доступно во внешнем интерфейсе?Я полагаю, что DateTime.ParseExact тоже поможет.

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

Вы ответили правильно. Сортировка должна выполняться на уровне базы данных. Использование DateTime.ParseExact будет означать, что все строки должны быть извлечены на клиенте, а затем отсортированы, что может быть не очень эффективным. После того, как результаты извлечены из базы данных, вы можете проанализировать строку в DateTime, чтобы в итоге показать ее в формате, отформатированном в пользовательском интерфейсе.

1 голос
/ 08 октября 2010

Но если какое-либо из значений НИКОГДА хранится в неправильном формате, ваш запрос может потерпеть крах, даже если это неправильное значение не является логически частью результатов (поскольку Oracle может оценивать вещи не по порядку). Чтобы быть действительно безопасным, вам нужно создать небольшую функцию PL / SQL, которая перехватывает исключения преобразования.

create or replace function safe_to_date(bad_data_type in varchar2) return date is
begin
  return to_date(bad_data_type, 'DD-MON-YYYY');
  --What happens if the format is wrong?  This just ignores it.
  exception when others then return null;
end;
/

Тогда вам нужно всегда использовать эту функцию вместо to_date:

select safe_TO_DATE(fakedatecolumn,'DD-MON-YY')
from table
ORDER BY safe_TO_DATE(fakedatecolumn,'DD-MON-YY');

Это отстой, но это цена, которую вы платите за неправильное хранение ваших данных.

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