您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“oracle如何查出某個字段帶空格的數據”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“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如何查出某個字段帶空格的數據”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。