2016-06-12 12 views
0

I CSV-Datei haben, das Datumsfeld enthält entweder:
1.% Y-% m-% d
2% m /% d /% Y
3. leere ZeichenketteIgnorieren Datum Umwandlung Warnungen (MySQL)

Der Code, den ich für den Import verwenden:

LOAD DATA INFILE ... 
SET EpStartDate = IFNULL (DATE(@v_EpStartDate), STR_TO_DATE(@v_EpStartDate, '%m/%d/%Y')), 
... 

Aber dieser Code löst Warnung über jedes %m/%d/%Y Datum und über jede leere Zelle.

Es ist sehr wichtig für mich, nur wichtige Warnungen anzuzeigen, wenn die Daten falsch sind, wie wenn das Datum 03/18/20095 ist.

Irgendeine Idee, wie man das macht?

Antwort

0

Es ist machbar mit benutzerdefinierter Funktion:

DROP FUNCTION IF EXISTS PARSE_DATE; 
DELIMITER // 
CREATE FUNCTION PARSE_DATE (str VARCHAR(255)) RETURNS DATE 
BEGIN 
    IF str in ('',' ','.') THEN RETURN null; 
    ELSEIF str like '__/__/____' THEN RETURN STR_TO_DATE(str, '%m/%d/%Y'); 
    ELSEIF str like '__-__-____' THEN RETURN STR_TO_DATE(str, '%m-%d-%Y'); 
    ELSE RETURN DATE(str); /*may throw a warning*/ 
    END IF; 
END// 
DELIMITER ; 
0

Lesen Sie hier die IFNULL-Funktionsdetails. enter link description here. Der Code

IFNULL(expr1, expr2) 

kehrt expr1 wenn expr1 nicht null ist, und expr2 wenn expr1 null ist.

Wenn also die Datumsvariable nicht leer ist, wird sie unverändert zurückgegeben (ohne auf das Format zu prüfen, wie in expr2 in Ihrem obigen Code) und wenn sie leer ist, wird sie mit dem Datumsformat verglichen.

Ihr Programm gibt Ihnen also Warnungen, weil Sie nach Datumsformaten auf leeren Strings suchen und gleichzeitig die nicht leeren Strings eingeben, ohne nach ihrem Datumsformat zu suchen.

+0

, wie Sie vorschlagen, für das Datumsformat zu überprüfen? –