我想写一个存储过程,做成任务每天将一个文件导入一张表中。但是文件名是以每天的日期命名的,如2009-04-28.txt我写了一个导入语句,却不知道怎么获得文件名啊,请大家赐教。load data infile 'E:\2009-04-16.txt' ignore into table colorring
character set gbk
fields terminated by '|' enclosed by '' lines terminated by '\n';如何才能将'E:\2009-04-16.txt'替换为我需要的文件名呢?请大侠们给出存储过程的示例或者方法呢?create procedure p1()
begin
  获得当前的日期;
  load data infile '当前日期.txt' ignore into table colorring
  character set gbk
  fields terminated by '|' enclosed by '' lines terminated by '\n';
end;谢谢!

解决方案 »

  1.   

    不需要存储过程,直接利用MySQL的函数就可以了。mysql> select concat('E:\\',DATE_FORMAT(CURDATE() ,'%Y-%m-%d') ,'.txt');
    +-----------------------------------------------------------+
    | concat('E:\\',DATE_FORMAT(CURDATE() ,'%Y-%m-%d') ,'.txt') |
    +-----------------------------------------------------------+
    | E:\2009-04-28.txt                                         |
    +-----------------------------------------------------------+
    1 row in set (0.00 sec)
    改你的SQL语句如下load data infile concat('E:\\',DATE_FORMAT(CURDATE() ,'%Y-%m-%d') ,'.txt') ignore into table colorring
    character set gbk
    fields terminated by '|' enclosed by '' lines terminated by '\n';
      

  2.   

    直接取当天日期就OK了,
    load data infile concat('E:\\',DATE_FORMAT(CURRENT_DATE() ,'%Y-%m-%d') ,'.txt') ignore into table colorring character set gbk fields terminated by '|' enclosed by '' lines terminated by '\n';
      

  3.   

    如果要用SP
    create procedure p1()
    begin
      获得当前的日期;
      load data infile concat('E:\\',DATE_FORMAT(CURRENT_DATE() ,'%Y-%m-%d') ,'.txt') ignore into table colorring
      character set gbk
      fields terminated by '|' enclosed by '' lines terminated by '\n';
    end; 
      

  4.   

    load data infile concat('E:\\',DATE_FORMAT(CURDATE() ,'%Y-%m-%d') ,'.txt') ignore into table colorring
    character set gbk
    fields terminated by '|' enclosed by '' lines terminated by '\n';这条语句不能运行呢
    说concat这里有错
    报错:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'concat('E:\\colorring\\',DATE_FORMAT(CURDATE() ,'%Y-%m-%d'),'.txt' ) ignore into' at line 1
      

  5.   

    concat语句本身是正确的,load语句也是正确的。但是两个不能合在一块用
      

  6.   

    测试了一下,确实存在上述问题,且LOAD DATA不能在SP中使用
      

  7.   

    测试结果:
    LOAD DATA不能在SP、UDF、PREPARE中使用
      

  8.   

    在语言环境中用字符串累加得到SQL语句,再运行试试
      

  9.   

    试了一下,LOAD DATA无法在 infile 的文件名中加变量。实现相同的功能看看可不可以直接用操作系统命令来实现?
    用mysqlimport.exe来实现
      

  10.   

    生成BAT文件:内容
    mysqlimport -u root -padmin -d  --fields-terminated-by=, depot a.txt说明:-u root  ("root" 数据库用户名,MS只有ROOT用户有这个权限)-p admin("admin" 密码,如果不写,执行时要求输入密码~)-d 插入数据之前删除表数据 --fields-terminated-by=,  ("," 数据分割符,默认是Tab 跳格)depot (数据名字)a.txt(要导入的txt文件,"."之前将自动看成是表名,如果放在MySQL 的Data 目录下读取应该没有错误,如果放在其他盘,MS有问题,没有调查)其他参数(没有测试的)-f or --force 不管错误,强制插入数据-i or --ignore 跳过或者忽略那些有相同唯一 关键字的行, 导入文件中的数据将被忽略。-l or -lock-tables 数据被插入之前锁住表,这样就防止了,你在更新数据库时,用户的查询和更新受到影响。-r or -replace 这个选项与-i选项的作用相反;此选项将替代--fields-enclosed-by= char指定文本文件中数据的记录时以什么括起的, 很多情况下数据以双引号括起。 默认的情况下数据是没有被字符括起的。--lines-terminated-by=str此选项指定文本文件中行与行之间数据的分隔字符串或者字符。 默认的情况下mysqlimport以newline为行分隔符。
      

  11.   

    我试着把导出来的数据导入到以每天日期为名称的文件中
    select * from table1 into outfile concat('c:\\',date_format(curdate(),'%Y-%m-%d'),'.txt')
    为什么后边的文件名他不认呢?
      

  12.   

    用PREPARE试试
    set @ee=concat('select * from t4 into outfile ','''d:\\\\temp\\\\1.txt''');
    select @ee;
    prepare ff from @ee;
    execute ff 测试通过,自行修改一下
      

  13.   

    我试着用create event来做,用event中也不能使用load data infile
    所以我决定用WWWWA的办法。如果不行,就用java写程序!