SQL中字符串的比较

时间:2012-11-27 17:34:18

标签: sql oracle

您好我想比较同一列中的两个CLOBS。为此,我理解我必须先将它们转换为varchar。

我想从查询中检索的字符串总是具有一个字符串是另一个字符串的子集的结构。这意味着一个字符串包含另一个字符串。始终从1 ... n

开始

因此,如果string1具有长度k并且string2具有长度n,则k <1。 n然后string2匹配string1到k。情况总是如此。 n!= k

无论如何,下面是我的代码,我无法相互映射CLOB。我从来没有得到任何结果。到目前为止,我的方法是将较长的字符串转换为较短的字符串,然后检查它们是否匹配。然而,这不起作用。我没有得到任何结果。

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的长度吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您应该使用dbms_lob_compare函数。

阅读以下关于此的链接:

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