2014-04-10 49 views
0

我有一個包含三列的表,birth_day,birth_month和birth_year。這三個都是INT。我想CONCAT()這些並將它們轉換爲EPOCH並將它們保存回新列。傳遞給EPOCH的字符串MySQL

要CONCAT()這些值我用

SELECT CONCAT(birth_month, "/", birth_day, "/", birth_year) AS new_birthday from birthdaytable 

我被陷在我將如何轉換爲EPOCH。我會嘗試將new_birthday投到一天,然後對此進行一些計算,但其中一些年份不在MySQL的DATE/YEAR範圍內(有些在1901年之前)

想法?

+1

你爲什麼不使用一個簡單的日期列? 「支持的範圍是'1000-01-01'到'9999-12-31'」,參見http://dev.mysql.com/doc/refman/5.5/en/datetime.html – VMai

+0

1901是極限的32位UNIX'time_t'類型紀元值。你爲什麼使用這些,尤其是日期?這裏的時區非常重要,並且會大幅擺動這個值的解釋。 – tadman

回答

1

你必須改變你的CONCAT第一,並結合起來,與UNIX_TIMESTAMP

SELECT UNIX_TIMESTAMP(CONCAT(birth_year, "-", IF(birth_month < 10, CONCAT('0', birth_month), birth_month), "-", IF(birth_day < 10, CONCAT('0', birth_day), birth_day))) AS newField from birthdaytable 
+0

已更新,以滿足您使用零填充的需要 –

+0

謝謝,大多數情況下都適用,但某些UNIX_TIMESTAMP()仍然返回爲0。如果我刪除UNIX_TIMESTAMP()只是爲了查看concat,它看起來像日期格式正確,我不能告訴任何押韻或他們無法工作的原因。例如「1981-12-27」可以很好地轉換,而「1934-02-05」返回0.00 – user2229544

+0

@ user2229544,這是因爲unix時間戳從'1970-01-01'開始。如果您在此之前處理日期,則不能使用unix時間戳。正如上面的評論中所提到的那樣,對於新列,最好使用'DATE'數據類型。 –

0

用途:

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');-> 1196440219 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

+0

謝謝!它看起來像這樣會工作,但我沒有注意到,直到我用你的查詢。這些月份是單數或雙數。因此,10,11和12可以很好地轉換,任何單個數字月份都不會,它們是檢查單個數字月份的簡單方法嗎?如果是這樣,請添加前導0? – user2229544

+0

使用DATE_FORMAT() –