DB2 SQL中的正则表达式

Sam*_*una 10 regex sql db2

(除了使用UDF之外)对DB2 9.7的任何REGEXP-In-SQL支持?

小智 6

我是komikoni(小西圭佑).

我创建了db2中不存在的正则表达式函数(UDF).UDF使用SQL/XML(Xquery).你可以轻松安装.

正则表达式列表提供UDF

  1. REG_MATCHES 提供重合存在(标量)
  2. REG_REPLACE 字符串替换(标量)
  3. 检索到REG_COUNT个匹配项(标量)
  4. REG_POSITION 匹配位置获取(标量)
  5. REG_SUBSTR 获取字符串匹配(Scalar)
  6. REG_SUBSTR_TABLE 匹配字符串信息列表(表)
  7. REG_TOKENIZE_TABLE 不匹配的字符串信息列表(除以分隔符字符串)(表)
  8. REG_ALLTOKEN_TABLE 不匹配字符串列表和匹配的字符串信息(表)

脚本可以从这里下载.(抱歉用日语)

https://www.ibm.com/developerworks/jp/data/library/db2/j_d-regularexpression/

(英文:Machine translation Script:日文页面的最后一页)

我期待着您的反馈和意见.


Ang*_*ocA 6

真正的答案是DB2 确实支持正则表达式,因为通过xQuery和匹配函数添加了PureXML(包括v9.7).

例如:

db2 "with val as (
 select t.text
 from texts t
 where xmlcast(xmlquery('fn:matches(\$TEXT,''^[A-Za-z 0-9]*$'')') as integer) = 0
)
select * from val"
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息:


小智 5

除了DB2 z/OS之外,它工作正常 - 在DB2 v10 z/OS中,您必须使用PASSING,如下所示

   with val as (
     select t.text
     from texts t
     where xmlcast(xmlquery('fn:matches($v,"^[A-Za-z 0-9]*$")'
                    PASSING t.text as "v" ) as integer) = 0
    )
    select * from val
Run Code Online (Sandbox Code Playgroud)


dat*_*rik 5

从DB2 11.1开始,内置了regex支持。新功能之一是REGEXP_SUBSTR并且还有更多功能。

SELECT REGEXP_SUBSTR('hello to you', '.o',1,1) 
   FROM sysibm.sysdummy1
Run Code Online (Sandbox Code Playgroud)


tes*_*sus 4

DB2 9.7 中没有对正则表达式的内置支持。

唯一的方法是使用 UDF 或表函数,如评论中添加的文章“OMG Ponies”中所述。

@dan1111:我不喜欢我的帖子被编辑,特别是如果人们无法正确阅读问题。OP 询问DB2 9.7 的任何 REGEXP-In- SQL支持

SQL 不是 XQuery!

抱歉,请不要删除我 100% 正确答案的文字。您可以添加评论或写下您自己的答案。

  • 这不是真的。DB2 9.7 通过 xQuery 和 matches 函数支持正则表达式:http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.xml.doc/doc/xqrfnmat。 html (2认同)