У меня есть объект CRecordset, запрашивающий большую таблицу.Запрос стандартный
SELECT colA, colB, ... FROM tabA LEFT OUTER JOIN tabB ON ... WHERE ... ORDER BY ...
, и я использую
my_recordset->GetFieldValue ((short) the_column_rank, my_cstring) ;
, чтобы получить нужное мне значение.Этот код работал около часа, читая около 2 миллионов строк, затем примерно на полпути он дал мне исключение и вылетел.Исключение говорит: «Неверный формат даты и времени».
Я открыл базу вручную, чтобы посмотреть, что случилось с этой конкретной строкой.Я также посмотрел метаданные столбца;
SELECT * FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME LIKE 'tabA'
AND COLUMN_NAME LIKE 'date_column'
дал тип данных DATE, поэтому я предполагаю, что это не метка времени или что-то еще.Так как я читал другие поля до этого, я мог точно определить точную строку, поэтому я также запросил ее:
SELECT date_column
FROM tabA LEFT JOIN tabB ON ...
WHERE conditions_to_get_the_one_row
дал 30/11/02
, что я хочу.
Теперь этотолько sqldeveloper.exe его отображает.В моем использовании GetFieldValue значение преобразуется в строку.И тогда я спросил это:
SELECT date_column,
CAST (date_column AS VARCHAR(100)) AS date_txt,
to_char(date_column, 'DD-MM-YYYY') AS date_chr
FROM tabA LEFT JOIN tabB ON ...
WHERE conditions_to_get_the_one_row
, который отображает 30/11/02 00/00/00 00-00-0000
, иначе не то, что я хочу.И, парень, я понятия не имею, что здесь происходит.
Я пытался с полным диапазоном значений;
SELECT DISTINCT date_column,
CAST (date_column AS VARCHAR(100)) AS date_txt,
to_char(date_column, 'DD-MM-YYYY') AS date_chr
FROM tabA LEFT JOIN tabB ON ...
WHERE standard_conditions
ORDER BY date_txt ASC
, но только эта дата имеет эту проблему (вторая строка и далее имеютвсе три значения, описывающие одну и ту же дату).Почему это происходит ?Как же тогда я мог запросить это поле, чтобы я всегда получал результат (в виде строки) с правильными значениями DMY?
(EXTRACT (YEAR FROM date_column)
вернул 0 для этой одной строки, а все остальное правильно).