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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE查詢欄位中含有空格的資料Oracle
- es統計資料去除某個欄位的某些資料
- 如何查詢某個資料表中除某個欄位的所有資訊???
- 一個篩選mongo存在某個欄位的資料的技巧Go
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL
- mongodb查詢資料庫中某個欄位中的值包含某個字串的方法MongoDB資料庫字串
- 【GP】透過資料字典檢視某個表的欄位
- sql去除某個欄位中的某個字串 replaceSQL字串
- 如何找到某個 ABAP structure 某欄位的源頭來自哪個資料庫表Struct資料庫
- mysql資料表按照某個欄位分類輸出MySql
- MySQL中修改一個資料庫下包含有某個相同欄位的所有表的欄位長度MySql資料庫
- 查詢某個欄位的不同值
- 查詢某資料庫中所有的欄位資料庫
- andFilterWhere()函式找不出某個int型別欄位為0的資料Filter函式型別
- 怎樣獲得資料表中某個欄位的第二個最大值
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- MySQL-取某個欄位表中每組幾行資料方式MySql
- 逆向工程通過某個欄位排序排序
- ElasticSearch 設定某個欄位不分詞Elasticsearch分詞
- hive將查詢資料插入表中某欄位無資料Hive
- Oracle 帶LOB欄位的表的遷移Oracle
- 在Oracle 中查詢某個欄位存在於哪幾個表 (轉)Oracle
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- oracle增加欄位帶預設值Oracle
- 表中已有資料,將表中某個欄位為空的改為非空
- 獲取SQL資料庫中某個表中的所有欄位名稱的通用方法SQL資料庫
- mysql如何判斷是否存在某個欄位MySql
- 查詢mysql某張表中的所有資料(欄位)型別MySql型別
- SQL Server中根據某個欄位,ID欄位自動增長的實現SQLServer
- 如何查詢SAP Fiori UI上某個欄位對應的底層資料庫表UI資料庫
- 查詢/刪除重複的資料(單個欄位和多個欄位條件)
- 二維陣列根據某個欄位排序陣列排序
- sqlserver判斷欄位值是否存在某個字元SQLServer字元
- 更新大表中某個欄位的儲存過程儲存過程
- MySQL查詢某個欄位含有字母數字的值MySql
- mybatis-plus 獲取某列表的某欄位的集合MyBatis
- 轉載:Oracle常用的資料庫欄位型別Oracle資料庫型別
- 使用SQL語言 替換資料庫某欄位內的部分內容SQL資料庫