2016-09-11 1 views
0

mysqlで文字列を含む列を更新しようとしていて、datetimeで別の列に送信しようとしています。私は次のクエリdatetimeで特定の文字列を変換する

update 2001080_t val 
set val.datetimestamp = convert (val.NotUsed4, datetime) 

しかし、文字列が正しい形式

Example: 
    `string` 010716000000 
    ideal way 2016-07-01 00:00:00 
    results from query: 2001-07-16 00:00:00 

どのように読み取り方法を変更するためにはない問題を使用していますか?

+0

1999年以下のインスタンスが存在することはありますか? – Pachonk

+0

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date – CBroe

答えて

0

ので、同じようにMySQLは本当に、そのように日付を認識することはありませんので、あなたは、日付を自分で操作することができます:

SELECT CONCAT(IF(RIGHT(LEFT('010716000000',6),2) < 30, '20', '19'), 
RIGHT(LEFT('010716000000',6),2), '-', RIGHT(LEFT('010716000000',4),2), 
'-', LEFT('010716000000',2)); 

だからあなたのクエリは次のようになります。

UPDATE 2001080_t val 
SET val.datetimestamp = CONCAT(IF(RIGHT(LEFT(val.NotUsed4,6),2) < 30, '20', '19'), 
RIGHT(LEFT(val.NotUsed4,6),2), '-', 
RIGHT(LEFT(val.NotUsed4,4),2), '-', 
LEFT(val.NotUsed4,2)); 

あなたは、多くの場合、これをしなければならない場合、私はそれのために機能させるreccomendだろうが:

CREATE FUNCTION hello (myIntDate INT(12)) 
RETURNS DATETIME 
RETURN CONCAT(IF(RIGHT(LEFT(myIntDate,6),2) < 30, '20', '19'), 
    RIGHT(LEFT(myIntDate,6),2), '-', 
    RIGHT(LEFT(myIntDate,4),2), '-', 
    LEFT(myIntDate,2)); 

編集:今年は> 30であれば、それは1900年の日付と見なされていることサポートが追加されました。 。

+0

ありがとう、それは私に合っている –

+0

私は6つのゼロがあることを見た終わり。必要な時間があれば、同じテクニックを適用することができます。 – Pachonk

関連する問題