免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3646 | 回复: 11
打印 上一主题 下一主题

如果用 正则 解决这条SQL的语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-13 22:03 |只看该作者 |倒序浏览
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 1 , '学生事项' , 'link' , 'list.asp' , 'local' , 9 , 0 , 'display' )

我想把 [num_tag1] 字段去掉,同时后面相应的位置的字段也去掉。
修改后的结果应该如下:
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] ,  [hidden] ) VALUES ( 1 , '学生事项' , 'link' , 'list.asp' , 'local' , 9 ,  'display' )

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2011-06-13 22:11 |只看该作者
手动改下不就行了,难不成你 INSERT 语句还是每组数据就写一条的。单纯用正则表达式比较麻烦

论坛徽章:
0
3 [报告]
发表于 2011-06-14 07:23 |只看该作者
有多条Insert 语句。
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 1 , '学生事项' , 'link' , 'list.asp' , 'local' , 9 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 2 , '办事指南' , 'link' , 'list.asp' , 'local' , 10 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 3 , 'sdf识' , 'link' , 'list.asp' , 'local' , 8 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 5 , '规章制度' , 'link' , 'list.asp' , 'local' , 13 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 7 , '通知' , 'link' , 'list.asp' , 'local' , 14 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [paixu] , [num_tag1] ) VALUES ( 8 , '颜色' , 'info' , '#E3EAE4' , 0 , 0 )
INSERT [site] ( [id] , [name] , [type] , [value] , [paixu] , [num_tag1] ) VALUES ( 9 , '密码' , 'info' , '123456' , 0 , 0 )
INSERT [site] ( [id] , [name] , [type] , [value] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 12 , '中国人民银行' , 'friend' , 'http://www.pbc.gov.cn/' , 5 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 13 , '中国建设银行' , 'friend' , 'http://www.ccb.cn/portal/cn/home/index.html' , 11 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 16 , 'sdsdfsdf' , 'friend' , 'departmentlink.asp' , 3 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 20 , 'sdfsdf' , 'link' , 'list.asp' , 'local' , 11 , 0 , 'hidden' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 21 , 'sdfsdsdf' , 'link' , 'list.asp' , 'local' , 16 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 54 , 'sdfsdf' , 'link' , 'list.asp' , 'local' , 15 , 0 , 'display' )
INSERT [site] ( [id] , [name] , [type] , [value] , [tag1] , [paixu] , [num_tag1] , [hidden] ) VALUES ( 55 , '下载中心' , 'link' , 'list.asp' , 'local' , 1 , 0 , 'display' )

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2011-06-14 08:10 |只看该作者
INSERT [site] (  , [name] , [type] , [value] , [tag1] ,  , [num_tag1] , [hidden] ) VALUES ( 1 , '学生 ...
qq64878641 发表于 2011-06-13 22:03


不知道楼主最终目的是什么。如果是练习正则表达式,那另当别论。
如果是单纯解决问题,完全可以插入后update一下表,把[num_tag1]设置成空就可以了。
会有很多SQL方面的办法满足楼主需求。

如果楼主一定要用Perl,考虑可以comma split后从新拼接就可以了。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2011-06-14 10:27 |只看该作者
INSERT [site] (  , [name] , [type] , [value] , [tag1] ,  , [num_tag1] , [hidden] ) VALUES ( 1 , '学生 ...
qq64878641 发表于 2011-06-13 22:03


# try it
s/,\s*\[num_tag1\]//;

论坛徽章:
0
6 [报告]
发表于 2011-06-14 17:52 |只看该作者
回复 5# jason680


    这样 前面的 去掉 了,但是我想要后面相应的字段名 也要 去掉 !
   请问该怎么处理呢?

论坛徽章:
0
7 [报告]
发表于 2011-06-14 17:55 |只看该作者
回复 4# py


    我数据建好,添加是 很多 数据,但是后来发现有个字段多余了。
   所以想去掉这个字段,然后重新执行下 SQL语句。


split 我想过,但是不知道怎么入手。
请问 牛人朋友 该怎么处理呢?

论坛徽章:
0
8 [报告]
发表于 2011-06-14 18:56 |只看该作者
回复 6# qq64878641


   
回复  jason680


    这样 前面的 去掉 了,但是我想要后面相应的字段名 也要 去掉 !
   请问该怎么 ...
qq64878641 发表于 2011-06-14 17:52



s/,\s*\[num_tag1\]//g;

论坛徽章:
0
9 [报告]
发表于 2011-06-14 22:15 |只看该作者
看了晕。

论坛徽章:
0
10 [报告]
发表于 2011-06-16 00:48 |只看该作者
一个正则无法处理完吧,还是写个小程序处理咯,例如:
while($line=<TEST>)
{
        chomp($line);
        @tmp1=split(/\(|\)/,$line);
        @tmp2=split(/\,/,$tmp1[1]);
        $tmp2cnt=@tmp2;
        @tmp3=split(/\,/,$tmp1[3]);
        $field="(";
        $value="(";
        for($i=0;$i<$tmp2cnt;$i++)
        {
                if($tmp2[$i]!~/\[num_tag1\]/)
                {
                        $field.=$tmp2[$i].",";
                        $value.=$tmp3[$i].",";                               
                }                       
        }
        $field.=")";
        $value.=")";                               
        $field=~s/\,\)/\)/;
        $value=~s/\,\)/\)/;
        $line=$tmp1[0].$field.$tmp1[2].$value;
        print "$line\n";
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP