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中删除相应的数据,即可,



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29654823/viewspace-2146545/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29654823/viewspace-2146545/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值