等待版主和高人路过,动态生成txt文件问题的继续

bluelive 2009-08-27 12:40:11
http://topic.csdn.net/u/20090825/17/cf8a2b18-3621-472b-9f0e-6d212bc4faa2.html
这是之前的问题,已经可以实现,可是在实际需求中,尚有疑难等版主和高人继续指点。

这次需求说明白些。
表A:
Name Id
张三 1
李四 2,3
表B:
Id Mobile
1 123
2 213
3 321
两表通过字段Id关联

希望输出的TXT文件包含两行,第一行为字段mobile,即手机号(必须以逗号分隔和结尾),第二行为具体内容,例如:
张三.txt
123,
欢迎您!
李四.txt
213,321,
欢迎您!

目前遇到两个难点:
1.生成的手机号为多个时,不知怎么获取?
2.输出换行符,可以换行,可是在第一行老是多出“\”符号。

大致源码如下:

DELIMITER //
drop procedure if exists P_Level2//
CREATE PROCEDURE P_Level2()
begin
declare l_user_name varchar(50);
declare l_mobile_id varchar(255);
declare l_mobile varchar(25);

declare l_cur cursor for
select * from A;
open l_cur;
fetch l_cur into l_user_name,l_mobile_id;
while (l_fetion_id is not null) do
--下面的报错,目标是循环获取手机号,代码不知怎么写
begin
set @v_mobile="";
declare l_cur2 CURSOR for
select mobile from B
where id in (l_mobile_id);
open l_cur2;
fetch l_cur2 into l_mobile;
while (l_mobile is not null) do
@v_mobile=concat(@v_mobile,l_mobile,',')
fetch l_cur2 into l_mobile;
end while;
close l_cur2;
end;

--下面的代码的换行符输后,在第一行显示“\”,试了很多方法也不行。
set @sqlstmt=concat('select "',@v_mobile,',\n欢迎你"
into outfile "',l_user_name,"_",DATE_FORMAT(now(),'%Y%m%d'),'.txt"');

prepare stmt from @sqlstmt;
execute stmt;
deallocate prepare stmt;
fetch l_cur into l_user_name,l_fetion_id;
end while;
close l_cur;
end;//

...全文
326 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluelive 2009-08-28
  • 打赏
  • 举报
回复
分不多,不够分,各位大大,别介意。
ACMAIN_CHM 2009-08-28
  • 打赏
  • 举报
回复
[Quote]引用 19 楼 bluelive 的回复:
一个锦上添花的问题:
Mysql中是否有判断两个日期间隔多少工作日(排除周六周日和节日)的函数?如果没有的话,哪位大大有现成的函数,也望不吝赐教。:-)


这个可以自己写个函数处理就行了[/Quote]


可以说没哪个数据库会有这个函数。因为法定假日是不固定日期的的,比如春节。
一般来说常见的解决方法是

create table calendar (cdate date PK, workType int) // worktyep: 0 工作日, 7 周未, 9 法定假

然后就简单了 select count(*) from calendar where cdate between date1 and date2 and worktype=0;
bluelive 2009-08-28
  • 打赏
  • 举报
回复
新的问题,新开一贴了。现在结贴。
http://topic.csdn.net/u/20090828/10/2eff22fb-11de-4efa-872c-952bcc7b5e2f.html
bluelive 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wwwwb 的回复:]
测试过6楼的代码没有?一样结果正确
[/Quote]
:-(
真是对不住,没测试过,不过我想应该OK的,呵呵,结贴时会给大大分的。
只是感觉上ACMAIN_CHM大大的源码很规范整洁,适于教学,适于俺这样的懒人,所以套用他的了。
vinsonshen 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 bluelive 的回复:]
一个锦上添花的问题:
Mysql中是否有判断两个日期间隔多少工作日(排除周六周日和节日)的函数?如果没有的话,哪位大大有现成的函数,也望不吝赐教。:-)
[/Quote]

这个可以自己写个函数处理就行了
vinsonshen 2009-08-28
  • 打赏
  • 举报
回复
3.Mysql导出文件时可以通过Union all来换行,也从没了解过。

因为里面这过程就是进行记录的合并,导出记录时本身就可以自动换行了,无需再加 \r\n
wwwwb 2009-08-28
  • 打赏
  • 举报
回复
测试过6楼的代码没有?一样结果正确
bluelive 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wwwwb 的回复:]
3.Mysql导出文件时可以通过Union all来换行,也从没了解过。
\r\n
or
char(13) char(10)
导出时加
FIELDS ESCAPED BY ""
[/Quote]
你可以看看ACMAIN_CHM大大的源码,我已经实现了,生成的文件也OK。
bluelive 2009-08-28
  • 打赏
  • 举报
回复
一个锦上添花的问题:
Mysql中是否有判断两个日期间隔多少工作日(排除周六周日和节日)的函数?如果没有的话,哪位大大有现成的函数,也望不吝赐教。:-)
wwwwb 2009-08-28
  • 打赏
  • 举报
回复
3.Mysql导出文件时可以通过Union all来换行,也从没了解过。
\r\n
or
char(13) char(10)
导出时加
FIELDS ESCAPED BY ""
bluelive 2009-08-28
  • 打赏
  • 举报
回复
一切搞定,在Ubuntu里有recode可以重新转换文件编码。

大致总结下此次case的感受:
1.Mysql的函数很强大,group_concat,find_in_set等,以后好好研究函数;
2.动态SQL也值得研究,发现自己竟然没发现oracle中也有此功能,汗;
3.Mysql导出文件时可以通过Union all来换行,也从没了解过。
总之,大把的需要学习,不过平时用不到,估计研究的也少,不过至少开阔了思路,以后就好办。
bluelive 2009-08-27
  • 打赏
  • 举报
回复
谢谢各位的指教。
貌似Ubuntu那里真有办法,明天再理下思绪和结贴。
bluelive 2009-08-27
  • 打赏
  • 举报
回复
都试过,但仍然是乱码,mysql如果能在导出文件时设定导出的字符集该多好,现在估计只能在Ubuntu那里想办法了。
ACMAIN_CHM 2009-08-27
  • 打赏
  • 举报
回复
windows / unix 的文本文件格式不一样。你用FTP的时候 ascii 的状态是什么?

ftp> ascii
200 TYPE set to ASCII.
ftp>
bluelive 2009-08-27
  • 打赏
  • 举报
回复
另外因其他应用程序,字符集必须为GBK。
bluelive 2009-08-27
  • 打赏
  • 举报
回复
通过Windows的Ftp到linux(Ubuntu)平台上,在Ubuntu重新转码后,则可以成功发送短信,否则收到的短信时乱码。
ACMAIN_CHM 2009-08-27
  • 打赏
  • 举报
回复
[Quote]导出的TXT文件也为GBK,现在上传到Linux则变为乱码[/Quote]

这样问题已经不在 outfile 上了,应该是看你如何传。

你是上传是如何实现的?
WWWWA 2009-08-27
  • 打赏
  • 举报
回复
into outfile能够设置输出的中文编码?
不能
建立一个新的数据库,字符集设置为UTF8,再运行SP,生成TXT即为UTF8的了
bluelive 2009-08-27
  • 打赏
  • 举报
回复
首先谢谢各位!目前已成功生成TXT文件,这次低调些,先不急着结贴。
现在存在一个问题,原数据库的字符集为GBK,导出的TXT文件也为GBK,现在上传到Linux则变为乱码,现需输出utf-8格式的TXT文件? into outfile能够设置输出的中文编码?
ACMAIN_CHM 2009-08-27
  • 打赏
  • 举报
回复
mysql> select * from a;
+------+------+
| name | id |
+------+------+
| 张三 | 1 |
| 李四 | 2,3 |
+------+------+
2 rows in set (0.00 sec)

mysql> select * from b;
+----+--------+
| id | mobile |
+----+--------+
| 1 | 123 |
| 2 | 213 |
| 3 | 321 |
+----+--------+
3 rows in set (0.00 sec)

mysql> select a.name,group_concat(b.mobile)
-> from a,b
-> where find_in_set(b.id,a.id)
-> group by a.name;
+------+------------------------+
| name | group_concat(b.mobile) |
+------+------------------------+
| 李四 | 213,321 |
| 张三 | 123 |
+------+------------------------+
2 rows in set (0.05 sec)

mysql> delimiter //
mysql> Create Procedure p_bluelive()
-> BEGIN
-> DECLARE done INT DEFAULT 0;
-> DECLARE v_1 VARCHAR(10);
-> DECLARE v_2 VARCHAR(10);
-> DECLARE cur1 CURSOR FOR select a.name,group_concat(b.mobile)
-> from a,b
-> where find_in_set(b.id,a.id)
-> group by a.name;
-> DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
->
-> OPEN cur1;
-> FETCH cur1 INTO v_1,v_2;
-> WHILE done=0 DO
-> set @sqlstmt=concat('select \'',v_2,',\' union all select \'欢迎您!\' into outfile \'',v_1,'.txt\'');
-> PREPARE stmt1 FROM @sqlstmt;
-> EXECUTE stmt1 ;
-> DEALLOCATE PREPARE stmt1;
-> FETCH cur1 INTO v_1,v_2;
-> END WHILE;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call p_bluelive();
Query OK, 0 rows affected (0.02 sec)

mysql>



[code=BatchFile]C:\Program Files\MySQL\MySQL Server 5.1\DATA\csdn>dir *.txt
Volume in drive C is xxx
Volume Serial Number is xxxx

Directory of C:\Program Files\MySQL\MySQL Server 5.1\DATA\csdn

08/27/2009 03:24p 14 张三.txt
08/27/2009 03:24p 18 李四.txt
2 File(s) 32 bytes
0 Dir(s) 29,677,927,936 bytes free

C:\Program Files\MySQL\MySQL Server 5.1\DATA\csdn>type *.txt

张三.txt


123,
欢迎您!

李四.txt


213,321,
欢迎您!

C:\Program Files\MySQL\MySQL Server 5.1\DATA\csdn>
[/code]
加载更多回复(7)
英文:Expert Spring MVC and Web Flow 内容简介 《深入解析Spring MVCgn Web Flow》是Spring MVC 和Web Flow 两个框架的权威指南,书中包括的技巧和提示可以让你从这个灵活的框架中汲取尽可能多的信息。书中包含了一些开发良好设计和解耦的Web 应用程序的最佳实践,介绍了Spring 框架中的Spring MVC 和Spring Web Flow,以及着重介绍利用Spring 框架和Spring MVC 编写Web 应用程序的最佳方法。《深入解析Spring MVCgn Web Flow》还介绍了Spring 框架的设计模式,以及如何将同样的设计和技术应用到读者自己的代码中。 《深入解析Spring MVCgn Web Flow》适合各层次Spring Web 程序员阅读。 编辑推荐 《深入解析Spring MVCgn Web Flow》来自Spring开发团队的权威之作前所未有地深入剖析Spring MVC技术内幕大量专家经验和技巧,全面提升你的Web开发境界 Spring MVC和Spring Web Flow是Spring平台上两个极为灵活而且功能强大的Web框架。前者是构建在Spring框架上的Web应用程序框架,可以同许多其他视图技术无缝集成;后者是控制业务处理流程的有效解决方案,提供了一种编写有状态和基于会话的Web应用程序的简便手段。 《深入解析Spring MVCgn Web Flow》出自Spring核心开发者之手,不仅详细分析代码,全面剖析了两个框架的各种特性(包括一些不为人知的技术亮点)。告诉读者如何最大程度地发挥出它们的潜力。还解密了设计这两个框架时的许多决策内幕、所应用的设计模式和面向对象技术,使读者能够更深入地了解Spring。并在自己的项目中运用这些专家技术,全面提升自己的Web开发境界。 《深入解析Spring MVCgn Web Flow》由spring框架的开发和维护者SpringSource公司组织编写,作者均为资深Spring工程师或咨询师。 Seth Ladd是资深Spring培训师,曾为NEC公司等许多国际性机构构建Web系统。Darren Davison和StevenDevijver都曾是Spring核心开发人员,在Spring源代码和文档中可以很容易地找到他们的名字。而Colin Yates、Keith Donald和Rob Harrop均是SpringSource资深工程师,仍然是Spring新本开发的核心骨干。Yalcs是.J2EE架构师,Donald是SpringWeb Flow负责人,Hartop是Spring与Tomcat成产品负责人。“《深入解析Spring MVCgn Web Flow》为Spring社区弥补了一大空白。” ——Lasse Koskela.JavaRanch,Test Driven作者“《深入解析Spring MVCgn Web Flow》是非常急缺的深入讲解Spring MVCf~~Spring Web Flow的图书堪与Pro Spring相媲美。” ——Steve Anglin,资深Java技术专家

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧