我有一个在大表上查询的CRecordset对象。 查询是标准
SELECT colA, colB, ... FROM tabA LEFT OUTER JOIN tabB ON ... WHERE ... ORDER BY ...
我用
my_recordset->GetFieldValue ((short) the_column_rank, my_cstring) ;
获得我需要的价值。该代码运行了大约一个小时,读取了大约200万行,然后大约完成了一半,这给了我一个例外,然后崩溃了。异常显示为“无效的日期时间格式。”。
我手动打开了基座,以查看特定行的状态。我还查询了该列的元数据;
SELECT * FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME LIKE 'tabA'
AND COLUMN_NAME LIKE 'date_column'
赋予data_type为'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,其他所有内容都正确。)