5

我有一个来自 SQL Server 的 SQL 查询,它以“YYYY-MM-DD”格式返回日期作为字符串。如果我以这种格式在单元格中输入日期,它会被识别为日期。但是当我使用 CopyFromRecordset 填充工作表时,它似乎被视为字符串。任何使用单元格的公式都会先将其转换为日期。例如,如果我的日期在列 A 中,并且我创建了一个新列 B,其中填充了公式 =A1 + 0,则该公式将我的日期作为日期返回。

问题:我将 Recordset 数据用于一些事情,其中​​之一是数据透视表。数据透视表不会将我的日期视为日期。例如,我不能按日期分组。我的技巧是创建一个基本上为 =A1 + 0 的新列,我将更改我的宏以自动添加一个零,但我想知道从执行 CopyFromRecordset 的那一刻起是否有办法让它正确。

4

6 回答 6

4

最简单的方法是在 SQL 服务器上进行转换,例如

SELECT CAST(date_text AS DATE) FROM TestExcelDates;
于 2012-04-27T08:00:45.887 回答
2

CopyFromRecordset因在 Excel 中导致数据类型/单元格格式问题而闻名。

我想我记得在某处读过这是因为记录集的数据类型被忽略了,Excel 试图根据记录集中的数据子集计算出每一列本身的格式。

解决此问题的最佳方法是执行CopyFromRecordset.

于 2012-04-27T15:32:09.317 回答
2

在我更改了我的 SQL Server 数据库的视图后,我遇到了这个问题。我已将数据类型更改为 DATE;以前它是在不支持 DATE 的旧版本上,所以我使用了 DATETIME。我怀疑 Excel 并不总是通过 SQLOLEDB 提供程序识别 Date 数据类型,但它确实识别 DATETIME。感兴趣的领域是meas_dateSELECT CAST(meas_date AS DATETIME) AS meas_date, ...因此,我通过将其更改为强制转换并刷新了 Excel 中的查询来更改视图。工作!

于 2015-06-03T20:00:24.453 回答
1

CDate()使用记录集中的日期填充单元格时使用该函数。这会将字符串转换为日期值。

编辑

这适用于设置单个单元格值。对于使用CopyFromRecordset,我认为您需要在 SQL 查询中进行转换,因此查询返回的列是日期类型而不是字符串。

于 2012-04-27T06:24:54.493 回答
0

我也遇到了从 Teradata 导入数据的问题,并通过首先使用 NumberFormat = "m/d/yy h:mm;@" (24 hr date) 格式化日期列然后使用 VBA 和执行 ws.cells(iRow, iCol).value = ws.cells(iRow, iCol).value,它会强制 Excel 将字符串重新评估为日期/时间字段。

于 2015-01-15T18:34:22.697 回答
-1

这可能不是答案,但肯定会帮助您为您的问题找到正确的解决方案

String stringCellValue = myCell.toString();

这里 myCell 的数据类型为CELL,我已将其转换为字符串格式。如果你想要它所需的日期格式,那么你可以试试这个 -

SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
myCellDate = sdf.parse(stringCellValue );

希望对解决您的问题有所帮助...

于 2012-04-27T06:43:31.173 回答