2012-11-27 58 views
0

你好,我想比較同一列中的兩個CLOBS。要做到這一點,我明白我必須先將它們轉換爲varchar。SQL中的字符串比較

我想從我的查詢中檢索的字符串總是有一個字符串是另一個字符串的子集的結構。這意味着一個字符串包含另一個字符串。始終從1開始... n

因此,如果string1的長度爲k,string2的長度爲n,那麼kn,則string2將string1的值與k相匹配。情況總是如此。 n!= k

無論如何,以下是我的代碼,我無法將CLOB與對方進行comapring。我從來沒有得到任何結果。到目前爲止,我的方法是將較長的字符串轉換爲較短的字符串,然後檢查它們是否匹配。但是這不起作用。我沒有得到任何結果。

SELECT 
s1.signaturedescription, 
s2.signaturedescription, 
s1.signdate, 
s2.signdate 
FROM 
signature s1, 
signature s2 
WHERE 
s1.signatureid = 'VerificationSignature' 
AND 
s2.signatureid = 'EbrCorrectActualValues' 
AND 
s1.username = s2.username 
AND 
dbms_lob.compare(s1.signaturedescription, s2.signaturedescription, 106, 1, 1) = 0; 

上面的代碼工作,但是我想用s1.signaturedescription的長度替換「106」。我試圖通過執行以下操作來完成此操作:

dbms_lob.compare(s1.signaturedescription, s2.signaturedescription, length((TO_CHAR(SUBSTR(s1.signaturedescription,1,4000)))), 1, 1) = 0; 

但是這不起作用。我沒有得到任何返回的結果。你知道我可以如何將106改成s1.signaturedescription的長度嗎?

謝謝

+0

無厘頭:

閱讀下面的鏈接瞭解這一點。一個列只能是一個CLOB –

+0

我想正確的措詞是你有一個CLOB你想在兩個CLOB或VARCHAR中分解然後比較它們。單列不能有兩個CLOB,它總是一個CLOB。 – Annjawn

+0

@a_horse_with_no_name:我不知道,這對我有意義。操作系統是說'signature.signaturedescription'是一個CLOB,並且他想要比較兩個不同的簽名記錄。因此,「來自同一列的兩個CLOBS」的意思是「兩個字段中每個字段的某個CLOB列的值」。 – ruakh

回答

0

您應該使用dbms_lob_compare函數。 「從同一列*兩個CLOB的*」

http://dba-oracle.com/t_compare_clob_columns_dbms_lob.htm

+0

我現在使用比較功能,請參閱我的編輯/上面的問題 – ddd

+0

看看http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_lob。 HTM有一個關於比較的部分,他們解釋如何比較一個部分。還有函數dbms_lob.getlength – nightfox79