0

format の日付を持つ datatable に列がありますdd/MM/yyyy HH:mm。以下のコードを使用してデータテーブルを埋めますが、これは複数の select ステートメントに共通しているため、データテーブルを埋める前に列とそのデータ型を指定できません。データを入力した後の操作は、私には受け入れられます。

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/ 2012 年 10 月 00:00

4

2 に答える 2

0

クエリで日付に変換する方法は次のとおりです。

Min(TO_DATE(Arrivaldate, format_mask)

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

于 2012-09-20T11:02:34.710 に答える
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 に答える