我已经下载了一个包含双周数据的文件。由于没有程序包含处理这种格式的选项,我已经调整了自己的函数来加载这种格式。代码如下所示:
LOAD DATA LOCAL
INFILE '/my_folder/servicios.csv'
INTO TABLE SERVICIOS
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 2 LINES
(@periodo, MERCANCIAS, SERVICIOS, INPC, ENERGETICOS)
SET PERIODO = (SELECT IF(DAY(ld.prd) = 2, ADDDATE(ld.prd,14), ld.prd)
FROM (SELECT DATE(@periodo) AS prd) ld);
SET声明的作用是保持'2014/10/01'的第一周,但将'2014/10/02'第二周转为'2014/10/16'。
我知道我可以在LOAD DATA语句的SET部分中包含子查询。但是,我得到的只是NULL值。如果我在外面进行查询,我会得到正确的答案。谁能指出我失败的地方?
致以最诚挚的问候,
答案 0 :(得分:0)
我注意到我作为一个字符串,也可能是一个日期。对于简单的替换,这已修复:
SET PERIODO = IF(DAY(@periodo) = 2, ADDDATE(@periodo,14), @periodo);
但是,如果遇到这个问题不止一次,我发现创建一个user_function看起来更干净,可以扩展到其他选项。像
这样的东西CREATE FUNCTION BIWEEK_DATE(datein DATE)
RETURNS DATE
BEGIN
SET @biweek = DAY(datein);
SET @dateout = CASE @biweek
WHEN 1 THEN datein
WHEN 2 THEN ADDDATE(datein, INTERVAL 14 DAY)
ELSE NULL END;
END CASE;
RETURN @dateout;
END $$