我有两个表数据如下


我需要把两个表中的校名对应,但是第一个表格中有[公办]、[民办]或(北京市)、(天津市)等,比较麻烦,我要把字段中所有带中括号和小括号的内容去掉,一般数据库去括号用以下语句可以完成
数据示例:
在description_1文本后有(《焦点访谈》:blabla…)
去除方法:
update jdft_text set description_1 = replace(description_1,(reverse(substr(reverse(description_1) , instr(reverse(description_1),')')+1 , instr(reverse(description_1),'《')+1))),'')
表名为jdft_text
更改表格数据内容的sql语句:
updata 表名 set 字段名 = 新值
1
更改的是descrption_1字段,要将 (《焦点访谈》:blabla…) 替换为空白
接下来的任务是找到 (《焦点访谈》:blabla…)
用reverse将字符串翻转,这样")"就到了字符串的最前端。 其他文本+(《焦点访谈》:blabla…) 变为 :)…albalb:》谈访点焦《( +本文他其
substr:用来截取数据库某个字段中的一部分。语法:substr(string,start,length)。这时候要找到 )…albalb:》谈访点焦《( 在文本中的起始位置和长度。
instr:用来返回子字符串在原始字符串第一次出现的位置。语法:instr( 原始字符串,目标字符串)
故在substr中起始位置可写为
instr(reverse(description_1),')')+1
1
在substr中长度信息可根据"》"做判断:
instr(reverse(description_1),'《')+1
1
最后综合在replace里可去除()及其内容
↑以上蓝字内容引用自百度文库
用大型数据库的话上面很方便,但我用的access,相比其他数据库,他原始,简单,当然能够提供的操作函数也特别少,所以我再测试以上函数时发现,我无法使用reverse函数,我只能自己想办法。
备份数据库以防万一。
新建字段yxmc0,用来存储字段,防止操作失误影响原数据。
我的数据中可能含有小括号也可能含有中括号,为了简便,我把所有的左小括号换成左中括号,然后再去掉,写函数就简单了。
替换语句
update zytb_ycls2022 set yxmc0=replace(yxmc,'[','(')

左中括号全部变成左小括号 。
因为我的数据结构相对简单,有括号就一定在我要获取文字的后方,所以我用的方法就是截取字符串函数left.
update 带括号表 set yxmc0=left(yxmc0,instr(yxmc0,'[')-1)
出错了~~~~(>_<)~~~~

仔细阅读,错误的核心是【类型转换失败】
为什么存在类型转换呢?
可能是因为有些数据中没有括号,那么left的第二个参数就成为-1,这样不可能是正确的字符串类型了。
加一条判断就行了
update zytb_ycls2022 set yxmc0=left(yxmc0,instr(yxmc0,'(')-1) where instr(yxmc0,'(')>0
顺利去除~\(≧▽≦)/~

我保留了原始字段,也是方便以后继续用。
如果不是【保留内容+括号】的格式呢?
先取得左括号,然后取得右括号,左括号左侧内容+右括号右侧内容,left(yxmc0,instr(yxmc0,'(')-1)+right(yxmc0,instr(yxmc0,')') )
如果有多个括号再多截取几次吧。仔细研究instr函数即可。

在处理Access数据库时,遇到需要去除字段中括号及其内容的问题。通过使用SQL语句,结合instr和substr函数,成功实现了对中括号和小括号的去除。在遇到Access不支持reverse函数的情况时,通过转换思路,利用left和instr函数解决了问题,避免了类型转换错误。同时,对于不同情况的括号内容,通过多次截取和拼接实现了全面清理。
7298

被折叠的 条评论
为什么被折叠?



