2012-10-10 84 views
1

我有一個數據庫,這是通過phpmyadmin初始轉儲的一個Excel文件。所以沒有格式或其他邏輯被應用於表格。所以我基本上留下了一個「varchar」風格行的表。其中包括日期和時間等。需要轉換的3000多條記錄的MySQL DB

例子: START_TIME,END_TIME,日期,結束日期..這看起來像下午7時30分,11:00,12年9月9日,12年11月22日,然後一些行是罰款只是他們的方式是。不幸的是,我不能將整個表格轉換爲更好的格式,因爲有人圍繞這種稱爲表格的糟糕設計提供了許多功能。真正唯一的事情是,表格有一個自動遞增的ID,每行可以與某些東西相關聯。所以我認爲這是一種補丁方式,同時我們修復了很多將這些東西分開的功能,並且我可以做出各種各樣的橋樑。

製作一個表格,可以爲數據類型準備適當類型的行,然後可以使用一些mysql功能,例如在start_date上使用BETWEEN()以獲得列表 - z,但列表有限。

所以我想弄清楚有沒有一種方法可以將數據從一個錶轉儲到下一個,但在此查詢的過程中,它將它轉換爲我想要的類型,如datetime,結合start_date和start_time轉換爲日期時間格式,同樣與結束時間/日期?

或者這是我將不得不拉出堆,用PHP循環它,並讓它插入新行到新表?

回答

1

我會用PHP腳本來讀取原始數據,然後將其處理成正確的日期格式,然後插入到新表中。

所以情況是,你有一個時間和日期分開,你想合併它們,然後格式化爲DB可接受的日期格式。我會做這樣的事情:

date_default_timezone_set('America/Los_Angeles'); 

// you have separate dates and times like this 
$date = '9/9/12'; 
$time = '11:00 PM'; 

// combine them into one string 
$str = $date . ' ' . $time; 

$dt = DateTime::createFromFormat('n/j/y g:i A', $str); 

$DBFormat = $dt->format('Y-m-d H:i:s'); 

echo $DBFormat; 
// outputs DB date format -> 2012-09-09 23:00:00 

有一件事我注意到的是你第一次例子是7:30 PM和下一個例子是11:00PM。在後面的例子中,PM之前沒有空格。我不知道這是否是您的錯字,或者您的數據確實如此變化,如果確實如此,那麼我會添加一個支票並插入空格。

+0

是的,這就是我在想什麼,我希望我能通過某種查詢直接做到這一點。但是我已經建立了新的表格,所有其他的東西,所以在編寫腳本時不要感到痛苦。我現在唯一的問題是我不知道什麼時候的時間戳的起源是被列出的,因爲他們是東部,太平洋,中部,山區,其他..生病我必須找到我想。謝謝 – chris

+0

@chris我會選擇一個PHP腳本來處理數據而不是一個大的查詢/存儲過程,因爲我認爲如果需要的話,調試和添加複雜的邏輯將會更容易。 – MrCode

1

對於這一點,你可以按照如下步驟:

  1. 在有源表(即要拷貝的表)中的所有字段相同的數據庫創建新表。

  2. 創建一個PHP文件。

  3. 編寫一個MYSQL查詢來選擇源表中的所有值。

  4. 在while循環中,編寫一個查詢以將這些行插入到新表中。

  5. 在使用php中的「strtotime()和date()」函數將start_time,end_time,start_date,end_date列的值轉換爲所需格式之前。

  6. 將新值插入新表中。