SQL 怎么提取一个模式的字符串

比如我在STUDENT的TABLE中提取FIRST_NAME栏中,中间有大写的字符串,比如AbcD.,ZhengH.,PetterG.这种,第一步要提取他们,好像用是么I... 比如我在STUDENT 的TABLE中提取FIRST_NAME栏中,中间有大写的字符串,比如Abc D. , Zheng H. ,Petter G.这种,第一步要提取他们,好像用是么INSTR吧,然后需要把后面大写的部分都删掉.请教大家该怎么做? 展开
 我来答
百度网友9a842d4
2015-02-04 · TA获得超过141个赞
知道小有建树答主
回答量:77
采纳率:0%
帮助的人:84.5万
展开全部

这个通常我的做法有两种方式(sql server,如果你是oracle或是其他的。。。。。。)

第一种,也是我用的最多的,就是用sql server 自身带的一些字符串函数去处理,这种方式需要你自己去分析,做法比较灵活,比如书你这个,如果仅以你这3个示例字段来讲,可以将‘ A.’替换成‘’

update table1 set column1 = REPLACE(column1,' A.','')

然后依次去执行B  C  ...,但是这么做也是有风险的,需要你了解这一列数据,比如这样做会把小写的‘ a.’也替换掉,这时可能就需要通过collate Chinese_PRC_CS_AS来限定排序规则等方式来处理了,比较灵活,但是需要结合实际案例来做,只是给你一个思路,自己发挥吧。

第二种,这种只是针对sql server了,别的数据库不知道可不可以这么解决。

sql server从2005开始,也是基于.NET平台了,所以可以用C#写一个正则表达式去处理这个问题,如果你对C#和正则表达式了解的话,这个解决起来就十分简单了,而且貌似没有解决不了问题了。

我个人通常都用第一种,用C#去处理,用过几次,在特殊场合有奇效,希望对你有用。

追问
所以按你说的,必须要一条一条逐个修改?不能直接用一个pattern全部一起改?比如用你这个REPLACE(column1,' _.','')这样?这个好像不行,我就是表达一下这个意思。
追答
一次性替换,也行,用我说的第二种方法,用C#写一个,然后部署到sql server中,如果只用sql server完成的话,应该也可以吧,没想到。
这个东西看你怎么看待了,我看你的需求,应该就是一次性的吧,一次性把,执行26次就解决了,总比花了特别长的时间,一直想办法解决成本,如果你这个要反复的使用,可以封装到一个存储过程里面,以后都直接调用过程就行了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式