2010-08-10 44 views
2

我使用java將數據從csv文件複製到我的數據庫(mysql)。我有一個時間欄,值可以是h:mm:ss- h:mm:ss-表示我們超過了一定的時間延遲)。如何將java中的varchar轉換爲time?

所以我不得不將列類型更改爲varchar

我現在的問題是我需要比較此列中的記錄值,例如我需要顯示所有記錄,其中該列的值在30分鐘以下,知道該字段值超過24小時格式(可以是56:00:00)。

感謝您的幫助

回答

0

我不是專家的Java開發,但我知道在PHP你的要價(如果我的理解是正確的),可以用的strtotime來實現,所以使用,作爲一個搜索,我找到了這個線程。

PHP's strtotime() in Java

希望這可以幫助。

1

降[]並將其移動到TIME類型字段,你應該罰款

UPDATE tableName SET timeField = REPLACE(REPLACE(varCharField,'[',''),']','')

+0

我已經試過,但它沒有工作 – daria 2010-08-10 10:19:24

+0

你究竟是什麼ÿ? – Mchl 2010-08-10 10:21:11

+0

我已經省略了'['並設置數據類型爲時間,但它沒有工作。我忘了告訴你,時間值不限於0-23。我可以有56:00:00的值表示它是7個工作日。 – daria 2010-08-12 13:27:30

1

這個問題是可以解決任何設置時間數據在一列和布爾標誌在同一記錄的另一列之間不同' - '和非' - '記錄,我認爲這是一個負號,這是一般的解決方案。正如你正在使用mysql其中 你可以直接用' - '符號來設置數據,該符號在列中顯示負值(時間數據類型),正如你所說的,你需要將它們與30分鐘(00: 30:00)等你可以使用subtime()addtime()用於比較的mysql語法。希望你找到適合的答案。

問候

la_89ondevg

3

而是將其轉換爲秒,並將其存儲爲一個符號整數。你不能直接在字符串/變種上進行數字操作,這將是一個很高的按摩成本,並回到可用的格式。那爲什麼不直接以這種格式存儲呢?

這裏有一個開球例如如何將CSV字段轉換到秒:

public static int toSeconds(String time) throws ParseException { 
    SimpleDateFormat positiveTime = new SimpleDateFormat("'['hh:mm:ss']'"); 
    SimpleDateFormat negativeTime = new SimpleDateFormat("'[-'hh:mm:ss']'"); 

    if (time.startsWith("[-")) { 
     return -1 * (int) negativeTime.parse(time).getTime()/1000; 
    } else { 
     return (int) positiveTime.parse(time).getTime()/1000; 
    } 
} 

這裏是你如何使用它,並最終將其存儲在DB:

String time1 = "[00:00:30]"; 
String time2 = "[- 00:10:20]"; 

int time1InSeconds = toSeconds(time1); 
int time2InSeconds = toSeconds(time2); 

// ... 

preparedStatement = connection.prepareStatement("INSERT INTO tbl (col1, col2) VALUES (?, ?)"); 
preparedStatement.setInt(1, time1InSeconds); 
preparedStatement.setInt(2, time2InSeconds); 

要選擇的30倍以上秒,只是這樣做:

SELECT col1, col2 FROM tbl WHERE col1 > 30