2016-06-12 2 views
0

у меня есть CSV-файл, содержит поле даты, которое имеет либо:
1.% Y-% m-% d
2.% м /% г /% Y
3. пустая строкаИгнорировать предупреждения преобразования даты (MySQL)

код, я использую для импорта:

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

Но этот код бросков предупреждения о каждом %m/%d/%Y даты, и о каждой пустой ячейке.

Для меня очень важно показать только важные предупреждения, когда данные неверны, например, если дата 03/18/20095.

Любая идея, как это сделать?

ответ

0

Это выполнимо с помощью пользовательской функции:

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

Прочтите здесь информацию о функции IFNULL. enter link description here. В код

IFNULL(expr1, expr2) 

возвращает expr1, если expr1 не равно нулю, и expr2, если expr1 IS NULL.

Поэтому, когда переменная date не пуста, она возвращается как есть (без проверки формата, как это сделано в expr2 в вашем коде выше), а когда он пуст, он проверяется на формат даты.

Таким образом, ваша программа дает вам предупреждения, потому что вы проверяете форматы дат на пустые строки и в то же время вводите непустые строки, не проверяя их формат даты.

+0

, как вы предлагаете, чтобы проверить формат даты? –

Смежные вопросы