2016-09-11 15 views
0

Ich versuche, eine Spalte zu aktualisieren, die eine Zeichenfolge auf mysql enthalten und an eine andere Spalte mit Datetime senden. Ich verwende die folgende AbfrageKonvertieren einer bestimmten Zeichenfolge in Datetime

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

Aber das Problem, dass die Zeichenfolge nicht auf das richtige Format ist

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

Wie die Lese Art und Weise ändern?

+0

Wird es jemals einen Fall geben, in dem es 1999 oder niedriger ist? – Pachonk

+0

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

Antwort

0

Sie könnten die Termine selbst manipulieren, da MySQL wird wirklich nie ein Datum auf diese Weise erkennen, wie so:

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

So Ihre Abfrage wie folgt aussehen würde.

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)); 

Wenn Sie dies oft zu tun haben, würde ich empfehlen, eine Funktion für sie zu machen:

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)); 

Edit: Zusätzliche Unterstützung, wenn das Jahr> 30, es ist ein 1900 Datum gilt .

+0

Danke, es passt für mich –

+0

Ich sah, dass es 6 Nullen gibt das Ende. Wenn es etwas Zeit braucht, können Sie die gleiche Technik anwenden. – Pachonk

Verwandte Themen