2016-03-24 10 views
1

Zunächst ist die Verwendung einer anderen Programmiersprache nicht erlaubt.Einfügen von Datum im Format mdY mit reinem MYSQL

Betrachten Sie ein Datum in der Zeichenfolge mdY z. 1252016 (außer, dass der führende Monat eine Zeichenlänge von 1 oder 2 sein kann) ist bis zum 25. Januar 2016 10252016-25 Oktober 2016.

In jedem Fall würden wir den Teil des Monats als entweder wollen: SUBSTRING("1252016" , 1, 1); => 1 oder SUBSTRING("10252016" , 1, 2); => 10.

Zum Beispiel:

CONCAT_WS("-", 
    SUBSTRING("1252016" , -4, 4) , 
    SUBSTRING("1252016" , 1, 1) , 
    SUBSTRING("1252016" , -6, 2) 
); => "2016-1-25" 

Gibt es eine Möglichkeit, bedingt vom Anfang des Strings 1 oder 2 Zeichen zu bekommen, oder sonst eine Weise negativ von der 7 Position zu Beginn der Zeichenfolge zu lesen, und REVERSE es?

Der Grund, warum eine andere Programmiersprache nicht verwendet werden kann, liegt an der Menge an Dating, die über LOAD DATA LOCAL INFILE importiert wird. Und soweit ich es verstehe, kann ich nur die Struktur der Abfrage steuern.

+2

Was wäre das richtige Ergebnis für '1112016' sein? 11/1/2016 oder 1/11/2016? –

+0

@JoachimIsaksson es muss nur als ein richtiges 'DATUM' in die Datenbank eingefügt werden. Ob das Format als "mdY" oder "dmY" beginnt, ist irrelevant, da jeder das führende "d/m" als 1 oder 2 Zeichenlänge haben kann. – Jonathan

+0

@JoachimIsaksson ist korrekt. Ihr Datumsformat ist in vielen Fällen mehrdeutig, wenn Sie eine siebenstellige Zahl haben. Ihr Datenimportaufwand, wie derzeit angegeben, wird nicht erfolgreich sein. Wenn Sie Ihre Datenquelle dazu bringen können, für den 5. Dezember 2016 "12052016" und für den 25. Januar 2016 "01252016" zu schreiben, haben Sie eine Chance, dass dies funktioniert. Aber wenn Sie "1252016" bekommen, können Sie den Unterschied zwischen den beiden nicht unterscheiden. –

Antwort

3

Pad die Saite mit einer führenden Null, und verwenden Sie dann die STR_TO_DATE Funktion:

SELECT STR_TO_DATE(LPAD('1252016', 8, '0'), '%m%d%Y'); 
+0

Schön, danke! – Jonathan