我有CSV文件,包含日期字段,其中包含:
1.%Y-%m-%d
2.%m /%d /%Y
3.空字符串
我用于导入的代码:
LOAD DATA INFILE ...
SET EpStartDate = IFNULL (DATE(@v_EpStartDate), STR_TO_DATE(@v_EpStartDate, '%m/%d/%Y')),
...
但是这段代码会抛出关于每个%m/%d/%Y
日期和每个空单元格的警告。
当数据错误时,仅显示关键警告对我来说非常重要,例如日期为03/18/20095
。
知道怎么做吗?
答案 0 :(得分:0)
在此处阅读IFNULL功能详细信息。enter link description here。代码
IFNULL(expr1, expr2)
如果expr1为非null,则返回expr1;如果expr1为空,则返回expr2。
因此,当日期变量不为空时,它将按原样返回(不检查格式,如上面代码中的expr2中所做的那样),当它为空时,将根据日期格式进行检查。 / p>
因此,您的程序会向您发出警告,因为您正在检查空字符串上的日期格式,同时输入非空字符串而不检查其日期格式。
答案 1 :(得分: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 ;