某表 T1 中有flags 这列,有30位,默认(000000000000000000000000000000),我现在需要将第24位刷成‘1’。除了下面这种写法,还有木有更高效的:
UPDATE T1 SET flags=substr(flags, 1, 23)||'1'||substr(flags, 25);
T1 表,大概有几千万的数据。我看这样写,COST太高,很慢,REGEXP_REPLACE 函数我也不太会用,不知道有木有比较高效的写法?
请多指教~
可以考虑下 BITAND , 将 flags 当作或转成 bit 位 来操作。
######如果全部是默认值的话可以考虑直接加一列,默认值24位为1 ,然后改名。######回复 @StormFour : 请培养一下自己的理解能力。######回复 @huan :风马牛不相及,弃主论次没有意义。完全不能解决楼主的问题。######回复 @StormFour : 我说的是用同样的方法,insert效率要高过update。######回复 @huan : 请问你是怎么更新第24位呢######回复 @StormFour : 错误,对于上千万甚至上亿的数据,insert 绝对比update 全表快。典型的以空间换时间。###### regexp_replace(flags,'(\d{23})\d(\d{17})','\11\2')
没环境自己做个临时表测试一下 ######set flag =flag+100000 where substr(flag,24,1)=0
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。