oracle sql clob 查詢重複數據,多字段

clob字段在查詢時是沒法 group bydistinct 的,因此若是要根據clob查找重複的數據是很麻煩的,網上大多提出要用DBMS_LOB.SUBSTR 來解決,DBMS_LOB.SUBSTR 把clob轉換成字符串段再進行group by,並且若是字數太多還得分段轉換,這樣操做起來太麻煩,並且容易出現 字符串緩衝區過小 的錯誤,在網上搜了很久,忽然發現 Dbms_Lob.Compare 能夠解決這個問題。 sql

COMPARE 函數

COMPARE 函數會對給定偏移的給定長度的兩個大型物件,執行確切的逐位元組比較。 api


此函數傳回:
  • 零,若是兩個大型物件於指定偏移的指定長度徹底相同
  • 非零,若是物件不相同
  • 空值,若是 amount、offset_1 或 offset_2 小於零。

比較的大型物件的資料類型必須相同。
api詳細介紹地址:http://pic.dhe.ibm.com/infocenter/informix/v121/index.jsp?topic=%2Fcom.ibm.dbext.doc%2Fids_r0055117.htm&lang%3Dzh_CN jsp


如下,是我最終的sql,remark是clob字段 spa

Select * From Userinfo Where Id In(
    Select U.Id From Userinfo U,Userinfo User_Info
        Where U.Id!=User_Info.Id 
        And U.Typeid=User_Info.Typeid
        And u.theTime=User_Info.theTime 
        And u.createId=User_Info.createId 
        And Dbms_Lob.Compare(u.Remark,User_Info.Remark)=0 
        Group By u.Id 
)Order By id;
相關文章
相關標籤/搜索