共計 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 行業資訊頻道!