2013-11-14 47 views
1

我想將整數格式的日期遷移到DATETIME。以整數格式遷移mysql日期

我在我的舊數據庫日期格式如下:

olddb.table.date = 20131114(INT) olddb.table.time = 900(INT)(上午9點,24小時時鐘)

新的數據庫:

newdb.table.datetime =二○一三年十一月一十四日9:00:00(DATETIME)

我怎麼會遷移這跟純粹的SQL?

+0

你需要做整數運算的一點點(使用整數除法和模)來提取所有的字段,然後使用它們來創建datetime – acfrancis

+0

@acfrancis你能提供一個例子嗎? –

+0

你能給我們提供更多關於你的時間部分的例子嗎?如何存儲23h? 10點30分?你存儲秒? – Elorfin

回答

2
SELECT CAST(CONCAT(DATE(olddb.table.date),' ',TIME(olddb.table.time*100)) AS DATETIME); 
+0

如果它可靠地工作,那肯定比我的解決方案簡單得多。 – acfrancis

+0

它的確,我剛纔已經用〜20種不同的組合進行了測試。 –

+0

MySQL比我想象的更聰明。我總是使用帶破折號和冒號的字符串來清楚。 – acfrancis

0

您可以STR_TO_DATE您的日期部分轉換(MySQL documentation):

STR_TO_DATE(olddb.table.date, "%Y%m%d") 

而對於一部分時間,你可以使用相同的功能:

STR_TO_DATE(olddb.table.time, "%h%i") 

然後,您可以連接日期和並將函數應用於級聯結果:

STR_TO_DATE(concatenated_value, "%Y%m%d%h%i") 

concatenated_value是建立與:

CONCAT(olddb.table.date, olddb.table.time) 
0

試試這個:

cast(
    concat(
     table.date div 10000, '-', 
     lpad((table.date mod 10000) div 100, 2, '0'), '-', 
     lpad(table.date mod 100, 2, '0'), ' ', 
     table.time div 100, ':', 
     lpad(table.time mod 100, 2, '0')) 
as datetime) 

這裏有一個工作示例:

http://www.sqlfiddle.com/#!2/1ff75/1

+0

這似乎工作非常好!謝謝。 –

+0

這太複雜了,看到我的答案是更清潔,更簡單的解決方案。 –