首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 顶者有分!!! 200 分 求 存储过程  ---- 分拣电子邮件 [已结帖,结帖人:awash]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • awash
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-22 16:30:10 楼主
    说明:
    1。电子邮件保存在ms sql数据库中。

    1) 该数据库有三张表,表结构和字段名称完全相同

    t_email 保存电子邮件
    t_duplicate 保存重复邮件
    t_error 保存错误邮件

    2) 表结构如下:
    CREATE TABLE [dbo].[t_email] (
    [email] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
    [company] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
    [name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
    [country] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
    [category] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL
    ) ON [PRIMARY]
    GO

    3)需要分拣的电子邮件保存在email字段

    4)t_email表中的记录有100万条。


    2。存储过程的功能要求:
    1)如果首尾有空字符,要求清除空字符
      例如将 "  sea@abc.tv  " 处理为 "sea@abc.tv"
    2)有大量重复邮件地址。要求将重复的记录复制到t_duplicate表中,并在原t_email表中删除该条记录。
    3)邮件域名不一定是.com, .net 之类结尾。域名来自世界各地,例如 ".it", ".ae", ".se"等。
    4)如果不是合法的电子邮件,则将该条记录复制到t_error表中,并在原t_email表中删除该记录。
    5)合法电子邮件只能有字母或数字开头,可以包含英文的下划线字符,英文的中划线字符,英文句号字符。

    合法邮件的样式:
    XXX@xxx.xxx

    例如,以下3个均为合法邮件
    john.lee@mn.rr.cn
    john-lee@test-rr.com
    john_lee@mn.rr.com.ar

    以下这些不是合法邮件
    john-lee@test_rr.com (邮件用户名可以有下划线,但域名不能有下划线)
    -@vega-montage.dk
    OFIT@ZAHAV.COM.ILI


    6)不是每一行都有地址的,有不少记录的email字段是空的( <null>)。则将该条记录复制到t_error表中,并在原t_email表中删除该记录。
    7)最后,t_email中剩下的数据,都是清洗过的记录。


    3。待清洗的电子邮件存在不少错误,包括:
    1)有特殊字符,例如 “/”,分号,中文字符等。
    例如:capelec.sarl@wanadoo.fr/GREGORY.CLADERA@CAPELEC.FR

    类似的情况还有:
    a)lhysc@ms34.hinet.net;ysclh@hotmail.com
    b) narumon.chaim@paka.com <narumon.chaim@paka.com>
    c) g_naseeb@hotmail.com或 naseeb@emirates.net.ae

    等等,不胜枚举。 这些记录,一律复制到t_error表中


    2)非法邮件地址,这样的地址,将该条记录复制到t_error表。例如:邮件“OFIT@ZAHAV.CO.ILI”

    3)无符号连写
    例如: plasticzar@aol.comoralice@advanceplastics.com
    这里实际是两个邮件地址,中间有一个 or,这样的地址,将该条记录复制到t_error表。

    再例如:unicus@attbi.comORchristienshen@attbi.com
    这里也是两个地址,中间也是有一个 “or”。
    再例如:mini_94@hotmail.com.fernandojc2@hotmail.com.fernandojc2@bigpond.com

    这样的地址,将该条记录复制到t_error表。

    4)有可能是完全没有@字符,例如 braunsberger.at,或者 "1234"这样的数字或一些英文字串。这样的记录,将该条记录复制到t_error表




    以下是一段email范例:

    capelec.sarl@wanadoo.fr/GREGORY.CLADERA@CAPELEC.FR

    amen@amenwardy.com
    amen@amenwardy.com
    amen@amenwardy.com
    amrit_quilt_centre@hotmail.com
    junquett@quadrifoglio.com.br
    842234
    callas@artshoppe.net
    hello world
    flyingsnow368@yahoo.com.cn   
    beechworthwine@yahoo.com   
    mini_94@hotmail.com.fernandojc2@hotmail.com.fernandojc2@bigpond.com
    clive8116@yahoo.com.vivianbol@hotmail.com
    info@homenoffice.com.pk;mozzi@cyber.net.pk
    bilalzady@hotmail.com&waji@netvigator.com
    jwu@classicpkg.com/jbcindustries@shaw.ca
    francisco@leadermagazine.com.br,makeasy@imagelink.com.br
    mina_stl@hotmail.comormina_stl@yahoo.com
    LPahssen@mn.rr.comorLLPMARK@aol.com
    carolt@sharich.com, chugani@sharich.com, sunder@sharich.com 
    lhysc@ms34.hinet.net;ysclh@hotmail.com
    narumon.chaim@paka.com <narumon.chaim@paka.com>
    g_naseeb@hotmail.com或 naseeb@emirates.net.ae
    <null>
    ~~~~~
    "michael@dfgifts.com" or "john@dfgifts.com"
    agroquimlahuerta@prodigy.net.mx
    @. 
    -.-@amer.fi 
    #AHMED_ENP@YAHOO.COM 
    //Carol.Taylor@Geest.co.uk 
    -@vega-montage.dk 
    863-3015@HANMAIL.NET 
    1@profitebor.com
    amen@amenwardy.com
    OFIT@ZAHAV.CO.ILI
    amen@amenwardy.com


    清洗结果如下:

    1。保留在t_email表中的有

    amen@amenwardy.com
    amrit_quilt_centre@hotmail.com
    junquett@quadrifoglio.com.br
    callas@artshoppe.net
    flyingsnow368@yahoo.com.cn
    beechworthwine@yahoo.com
    agroquimlahuerta@prodigy.net.mx
    863-3015@HANMAIL.NET
    1@profitebor.com


    2。保存在t_duplicate表中的有

    amen@amenwardy.com
    amen@amenwardy.com
    amen@amenwardy.com
    amen@amenwardy.com
    (该邮件重复出现5次,故其中4条记录被复制到t_duplicate表中)


    3。保存在t_error表中的有

    capelec.sarl@wanadoo.fr/GREGORY.CLADERA@CAPELEC.FR

    842234
    hello world  
    mini_94@hotmail.com.fernandojc2@hotmail.com.fernandojc2@bigpond.com
    clive8116@yahoo.com.vivianbol@hotmail.com
    info@homenoffice.com.pk;mozzi@cyber.net.pk
    bilalzady@hotmail.com&waji@netvigator.com
    jwu@classicpkg.com/jbcindustries@shaw.ca
    francisco@leadermagazine.com.br,makeasy@imagelink.com.br
    mina_stl@hotmail.comormina_stl@yahoo.com
    LPahssen@mn.rr.comorLLPMARK@aol.com
    carolt@sharich.com, chugani@sharich.com, sunder@sharich.com
    lhysc@ms34.hinet.net;ysclh@hotmail.com
    narumon.chaim@paka.com <narumon.chaim@paka.com>
    g_naseeb@hotmail.com或 naseeb@emirates.net.ae  
    <null>
    ~~~~~
    "michael@dfgifts.com" or "john@dfgifts.com"
    @. 
    -.-@amer.fi 
    #AHMED_ENP@YAHOO.COM 
    //Carol.Taylor@Geest.co.uk 
    -@vega-montage.dk 
    OFIT@ZAHAV.CO.ILI
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-08-22 16:31:431楼 得分:2
    先顶一下,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sdhylj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-08-22 16:31:522楼 得分:1
    好长啊,顶.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wufeng4552
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:34:573楼 得分:1
    继续顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tianhuo_soft
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:44:034楼 得分:1
    引用 1 楼 happyflystone 的回复:
    先顶一下,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • linzi_0535
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:50:105楼 得分:1
    引用 4 楼 tianhuo_soft 的回复:
    引用 1 楼 happyflystone 的回复:
    先顶一下,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunhonglei2004
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:55:486楼 得分:1
    引用 5 楼 linzi_0535 的回复:
    引用 4 楼 tianhuo_soft 的回复:
    引用 1 楼 happyflystone 的回复:
    先顶一下,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • HEROWANG
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:02:167楼 得分:1
    太长,头晕
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ybkenan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:28:448楼 得分:1
    頂貼接分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zzxap
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:32:179楼 得分:1
    士大夫个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jzlzss
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 18:37:4510楼 得分:1
    看的有些累,顶下先~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • nealwike
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 19:20:0911楼 得分:1
    mark先
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zoujp_xyz
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 20:07:4212楼 得分:1
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ws_hgo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 23:50:3013楼 得分:1
    很长
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zds1010
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 00:38:1414楼 得分:1

    http://www.xpeng.com.cn
    http://www.lyyywx.com.cn
    http://www.bdgxqsq.com.cn
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bwu851
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 01:48:4615楼 得分:1
    引用 2 楼 sdhylj 的回复:
    好长啊,顶.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itymx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 09:08:4316楼 得分:1
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tsingleung
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 10:07:3617楼 得分:1
    能否将后缀预先分开
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-24 10:16:5818楼 得分:1
    1.也就是将合法的邮件地址写入t_email表,
    2.将合法的而且有重复的写入t_duplicate表,
    3.将错误的邮件地址写入t_error表,
    ------------
    不知道你的数据库版本是否可以使用正则来出来啦?
    其它思路,
    1.先过滤掉不是形如XXX@XXX.XXX,XXX@XXX.XXX.XXX,XXX@XXX.XXX.XXX.XXX之类的,
    2.在1的基础上在根据你列出来的判断条件判断,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ranzj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 10:38:4519楼 得分:1
    正则
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • muzhenxing013
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 10:43:1420楼 得分:1
    对,sql 2005功能强大,自己就可以发邮件,不像2000还要捆绑outlook,通过邮件服务器中转,但是如果企业有exchage的话,应该还不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • only_endure
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 21:33:0321楼 得分:1
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tianhuo_soft
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 22:16:1322楼 得分:1
    引用 2 楼 sdhylj 的回复:
    好长啊,顶.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flairsky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 22:21:0923楼 得分:1
    引用 22 楼 tianhuo_soft 的回复:
    引用 2 楼 sdhylj 的回复:
    好长啊,顶.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • szx1999
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:06:2824楼 得分:1
    邮件验证可以放在界面上用正则表达式进行验证,
    再分类存到各个表中。
    在存储过程里进行正则验证似乎不是sql的专长。
    看看高手们怎么说。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • simonhehe
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:07:4125楼 得分:1
    引用 1 楼 happyflystone 的回复:
    先顶一下,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wwd252
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:30:4826楼 得分:1
    引用 25 楼 simonhehe 的回复:
    引用 1 楼 happyflystone 的回复:
    先顶一下,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • moqiyayan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 11:04:0527楼 得分:1
    study!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • awash
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 11:37:2728楼 得分:0
    引用 18 楼 hery2002 的回复:
    1.也就是将合法的邮件地址写入t_email表,
    2.将合法的而且有重复的写入t_duplicate表,
    3.将错误的邮件地址写入t_error表,
    ------------
    不知道你的数据库版本是否可以使用正则来出来啦?
    其它思路,
    1.先过滤掉不是形如XXX@XXX.XXX,XXX@XXX.XXX.XXX,XXX@XXX.XXX.XXX.XXX之类的,
    2.在1的基础上在根据你列出来的判断条件判断,

    ms sql 2000 是否支持正则?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天