【问题标题】:changing a date with biweekly data MYSQL用双周数据 MYSQL 更改日期
【发布时间】:2014-10-15 23:22:37
【问题描述】:

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

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

最好的问候,

【问题讨论】:

    标签: mysql load subquery datatables


    【解决方案1】:

    我注意到我作为字符串的内容也可能是日期。对于一个简单的替换,这是固定的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 2014-02-23
      相关资源
      最近更新 更多