Oracle DATE становится недействительным во время преобразования запроса .Net в строку - PullRequest
0 голосов
/ 15 мая 2019

У меня есть объект 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 для этой одной строки, а все остальное правильно).

...