当模式包含十六进制字符时,Oracle SQL INSTR函数的语法

时间:2010-08-13 20:24:25

标签: sql oracle

我正在尝试在Oracle SQL中编写一个查询来访问CLOB字段中的特定子字符串。

要使用SUBSTR功能,我需要使用INSTR函数在CLOB中找到一个起点。

CLOB包含用十六进制字符分隔的X12数据。

为了找到我的子串的起始偏移量,我想做这样的事情......

INSTR(my_clob,'\ 0x1CGE \ 0x1D',1,1)

..其中第二个参数是我的“模式”,是一个十六进制1C,后跟字母G和E,后跟十六进制1D。

我已经尝试过通过Google找到的所有内容,到目前为止还没有任何工作。它失败并且语法无效,或者根本不返回任何内容。

对于DBMS_LOB.INSTR(),模式与LIKE使用的模式不同。看起来它只会占用一串字符,而不是模式匹配表达式,尽管我不能100%确定它会接受什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,\ 0x1C表示ASCII值为0x1C(十进制28)的单个字符,对吗?

在这种情况下,请尝试:

INSTR(my_clob, CHR(28)||'GE'||CHR(29), 1, 1)