0

我在数据表中有一个日期格式为的列dd/MM/yyyy HH:mm。我使用下面的代码填充数据表,这对于 1 个以上的选择语句很常见,因此我无法在填充数据表之前指定列及其数据类型。填写数据后的任何操作对我来说都是可以接受的。

data_adapt = New OracleDataAdapter(query, OraConn)
dt = New DataTable
data_adapt.Fill(dt)

对于分页,我使用跳过创建数据表的副本并如下所示

dtLineupCopy = New DataTable
dtLineupCopy = dtLineup.AsEnumerable().Skip(startRows).Take(pageSize)).CopyToDataTable()

现在的问题是,当我使用 Compute 方法时,它不会将列值视为日期类型,而是从列中返回一些随机日期值而不是最小值。

Arvdate = dtLineupCopy.Compute("Min(Arrivaldate)", "")

有没有办法转换列的数据类型?

还尝试添加一个日期时间类型的新列,但它会引发错误System.FormatException: String was not recognized as a valid DateTime

dtLineupCopy.Columns.Add("ArvDate", getType(DateTime), "CONVERT(Arrivaldate, 'System.DateTime')")

dtLineupCopy 的 Arrivaldate 列中的数据。

22/09/2012 01:02
27/09/2012 17:01
1/10/2012 1:02
13/10/2012 07:26
14/10/2012 19:47
20/10/2012 00:00
20/ 10/2012 00:00

4

2 回答 2

0

如果您传入的查询导致 Arrivaldate 作为字符串而不是日期返回,那么首选选项是更改该查询?不要选择到达日期,而是选择:

to_date(Arrivaldate, 'DD/MM/YYYY HH24:Mi') as Arrivaldate

如果不知何故这不是一个选项,那么你会在之后解析字符串。在表达式的范围内这样做DataTable.Compute意味着将您自己的解析日期转换为可排序的格式函数,例如...

Arvdate = dtLineupCopy.Compute("Min(Substring(Arrivaldate,7,4) + Min(Substring(Arrivaldate,4,2) + Min(Substring(Arrivaldate,1,2) + ... etc ..... " )) )
于 2012-09-20T11:56:24.777 回答
0

如何在查询中转换为日期:

Min(TO_DATE(Arrivaldate, format_mask)

http://www.techonthenet.com/oracle/functions/to_date.php

于 2012-09-20T11:02:34.710 回答