0

我在數據表中有一個列,其日期格式爲dd/MM/yyyy HH:mm。我使用下面的代碼來填充數據表,這對於多個select語句是很常見的,所以在填充數據表之前我不能指定列和它們的數據類型。填寫完數據後的任何操作都可以接受。Datatable計算方法將字符串列轉換爲日期

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

對於尋呼我創建一個使用數據表的複製跳過,並採取如下

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

現在的問題是,當我使用計算方法,它不會將列值作爲日期類型和從列中返回一些隨機日期值而不是最小值。

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 7點26
14/10/2012 19 :47
20/10/2012 00:00
20/10/2012 00:00

+0

日期格式不應該是轉換問題。我懷疑數據庫中有一些垃圾,即「Arrivaldate」列中的字符串不符合格式。 –

+0

@GertArnold我已經添加了上面的數據。請看看格式。這與文化有什麼關係? – Nilanjan

+0

我可以填寫一個數據表與一個DateTime列與您在一些相當古怪(對我)文化中提供的值。使用字符串列和計算列,即使AM/PM在時間組件中,CONVERT也可以在任何文化中吞下它。你確定數據庫表中的任何地方都沒有垃圾字符串,或者到目前爲止是否有這些值? –

回答

0

如何查詢轉換爲日期:

Min(TO_DATE(Arrivaldate, format_mask) 

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

+0

您確定這將作爲計算方法中的表達式嗎?我試過'dtLineupCopy。Compute(「Min(TO_DATE(ETA,'dd/MM/yyyy HH:mm'))」,「」)'但它會拋出錯誤。 – Nilanjan

+0

不,我在這裏指的是SQL查詢變量:data_adapt =新的OracleDataAdapter(查詢,OraConn)。如果沒有,你應該運行數據表並做一些類似CDate()的轉換,也許增加一個新的日期列作爲CDate(Arrivaldate) –

0

如果您傳入的查詢導致Arrivaldate作爲字符串而不是日期返回,那麼首選選項是更改該查詢?相反,選擇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 ..... "))) 
+0

試過這個'dtLineupCopy.Compute(「Min(Substring(Arvdate,7,4))+ Min (子字符串(Arvdate,4,2))+ Min(子字符串(Arvdate,1,2))「,」「)'但它會拋出一個錯誤'集合參數中的語法錯誤:期望單個列參數可能'Child' qualifier.' – Nilanjan