共计 2288 个字符,预计需要花费 6 分钟才能阅读完成。
这篇文章主要为大家展示了“oracle 如何查出某个字段带空格的数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“oracle 如何查出某个字段带空格的数据”这篇文章吧。
问题描述:把一个表从 oracle 同步到阿里云 rds, 居然报错违反唯一键,很是诧异,然后具体查看报错的那条数据,结果如下:果真有两条。
MySQL [bidinfo] select record_id ,login_id from meminfo.t_member_info where login_id= woaini1314
+———–+————-+
| record_id | login_id |
+———–+————-+
| 15142804 | woaini1314 |
| 78124319 | woaini1314 |
+———–+————-+
2 rows in set (0.00 sec)
然后根据 id 在 oracle 中查询,发现其中一个带空格,一个不带空格,
select record_id ,login_id from infoservice.t_member_info where record_id in(15142804 ,78124319);
这就麻烦了,这可是用户信息,不能随便删除,猜测是用户在注册的时候,多打了个空格,然后发现登陆不上去,就从新注册了个不带空格的相同名字的用户,然而 oracle 能识别到空格,但是 mysql 识别不到空格,正好我们有会员登陆日志,经查询确实是猜想这样。那么下来怎么统计出带空格的用户的主键 record_id 呢?
具体描述:
liuwenhe 和 liuwenhe+ 空格
由于 oracle 中识别空格,以下两条 sql 查的结果不一样。
select record_id ,login_id from t_member_info where login_id= woaini1314
select record_id ,login_id from t_member_info where login_id= woaini1314
但是 mysql 中不识别空格,以下查询的结果是一样的。都是两条
MySQL [bidinfo] select record_id ,login_id from meminfo.t_member_info where login_id= woaini1314
+———–+————-+
| record_id | login_id |
+———–+————-+
| 15142804 | woaini1314 |
| 78124319 | woaini1314 |
+———–+————-+
2 rows in set (0.00 sec)
MySQL [bidinfo] select record_id ,login_id from meminfo.t_member_info where login_id= woaini1314 +———–+————-+
| record_id | login_id |
+———–+————-+
| 15142804 | woaini1314 |
| 78124319 | woaini1314 |
+———–+————-+
2 rows in set (0.00 sec)
问题出现了,这个 login_id 是个唯一键, oracle 中不冲突,迁移到 rds 就违反了唯一键了,
如下怎么查出 oracle 中带空格的 record_id, 以便于从 mysql 中删除带空格的违反唯一键的数据。
一:先查出有问题的 login_id(去掉空格之后的 login_id)
select count(record_id),trim(login_id) from infoservice.t_member_info group by trim(login_id) having count(record_id) 1;
二:然后查出所有有问题的 login_id(包括带空格的和不带空格的), 放到一个临时表
create table liuwenhe.t_mmeber_info_bak as select record_id ,login_id from t_member_info where trim(login_id) in (select login from (
select count(record_id),trim(login_id) login from infoservice.t_member_info group by trim(login_id) having count(record_id) 1 ))
三:最后利用前两个步骤查出的结果求出有问题的 login_id 中带空格的那条数据的对应的 record_id.
select record_id from t_mmeber_info_bak where login_id not in (select trim(login_id) from t_mmeber_info_bak);
四:导成 txt 文件,然后利用 lord 进 mysql。
最后根据 record_id 在 mysql 中删除相应的数据,即可,
以上是“oracle 如何查出某个字段带空格的数据”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!