2012-10-17 26 views
7

Bir MySQL veritabanında "17:16:28 13 Eylül 2011 PDT" biçiminde bir zaman damgası var. Veritabanındaki alanın türü VARCHAR'dır. Bu VARCHAR'ı MySQL'de TIMESTAMP tipinde bir alana dönüştürmek istiyorum.VARCHAR zaman damgasını TIMESTAMP'e dönüştürün?

Bir string_to_time işlevi kullanmak gibi birkaç solutions suggested elsewhere on this site kullanmayı denedim, ancak bu çözümlerin tümü farklı bir zaman damgası türünden başlar.

Yukarıda bahsedilen VARCHAR zaman damgasını MySQL tarafından tanınan bir TIMESTAMP değerine nasıl dönüştürürüm, böylece verileri tarihe göre sıralayabilirim?

+0

[STR_TO_DATE()] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date), demek istediğin buysa, * neredeyse * sahip olduğunuz için format belirleyicileri sağlar. Anlayabildiğim tek istisna, saat dilimi. Farklı saat dilimleriniz var mı? –

cevap

7

Sen MySQL STR_TO_DATE işlevini kullanarak bunu yapabilirsiniz, şunu deneyin:

SELECT STR_TO_DATE("17:16:28 Sep 13, 2011 PDT", '%H:%i:%s %b %d, %Y PDT'); 

DÜZENLEME: biçimlendirme ile

SELECT STR_TO_DATE(field_name, '%H:%i:%s %b %d, %Y PDT') AS new_time 
FROM table_name; 
+0

Diğer cevaba yaptığım yorumu görün. – Mark

+0

Sorguyla güncellenmiş yanıt. Ayrıca bkz. Http://stackoverflow.com/questions/2523286/mysql-convert-tz – Omesh

+1

Çok teşekkürler, Omesh. Bu mükemmel çalıştı. Veritabanımda yalnızca iki saat dilimi olduğunu ve eski zamanın olduğu yerde her zaman dilimi için "update tablename set newdate = STR_TO_DATE (eski saat, '% H:% i:% s% b% d,% Y PDT") çalıştırdığımı öğrendim '% PDT%' gibi (PDT'yi PST'ye değiştiren ikinci kez) ve istediğimi aldım. – Mark

2

Kullanım str_to_date:

select unix_timestamp(str_to_date("17:16:28 Sep 13, 2011 PDT","%T %b %d, %Y PDT")); 

gün parçası ise (örneğin: 13) 01, 02 ... olarak gösterilmez. ancak 1, 2, 3, sadece bir rakam olduğunda,% d -% e değiştir

Saat dilimi tanınmayacağı için dikkatli olun, yalnızca biçimlendirme için bir dize değişmez! Farklı kayıtlar için farklı saat dilimleriniz varsa, uygun zaman damgasını almak için convert_tz() işlevini kullanmalısınız.

+0

Herkesin her zaman aynı örnekle "17:16:28 13 Eylül 2011 PDT" içeren her zaman ortaya çıktığını fark ettim. Aradığım şey bu değil. Bir dizeyi dönüştürmek istemiyorum. Bir SQL alanını dönüştürmek istiyorum. Ayrıca, convert_tz() için herhangi bir örnek var mı? – Mark

+0

Sanırım bu örnek sizin sorunuzdan alındığı için :) Ayrıca @Omesh alanın nasıl dönüştürüleceğine dair diğer kısmı da yanıtladı. Daha spesifik olarak varchar değerini iyi bir şekilde IMO olan başka bir alana dönüştürmek için. – Andrew

+0

Aha ... tarihin kendisi hakkında haklısın, ama kastettiğim şey şu ki, stackoverflow.com'a baktığımda insanlar beni gerçekten şaşırtıyor olan saha referansları yerine dizeleri kullanma eğilimindeler çünkü MySQL genellikle nasıl okunacağı hakkında ve verileri dizelerden ziyade alanlardan işlemden geçirir. Ayrıca, neden unix_timestamp işlevini eklediğinizi anlamıyorum. Bu gerçekten gereksizdir. – Mark

İlgili konular