用双周数据MYSQL更改日期

时间:2014-10-15 23:22:37

标签: mysql load subquery datatables

我已经下载了一个包含双周数据的文件。由于没有程序包含处理这种格式的选项,我已经调整了自己的函数来加载这种格式。代码如下所示:

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值。如果我在外面进行查询,我会得到正确的答案。谁能指出我失败的地方?

致以最诚挚的问候,

1 个答案:

答案 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 $$