DB2 SQL中的正则expression式

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

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

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

@ dan1111:我不喜欢我的文章正在编辑,尤其是如果人们不能正确地阅读这个问题。 OP询问DB2 9.7中的所有REGEXP-In- SQL支持

SQL不是XQuery!

对不起,请不要删除我的100%正确答案的文字。 你可以添加评论或写你自己的答案。

我是komikoni(小西圭介)。

我创build了db2中不存在的正则expression式函数(UDF)。 UDF使用SQL / XML(Xquery)。 您可以轻松安装。

正则expression式列表提供了UDF

  1. REG_MATCHES提供了一致性存在(标量)
  2. REG_REPLACEstringreplace(标量)
  3. REG_COUNT检索的匹配数量(标量)
  4. REG_POSITION匹配位置获取(标量)
  5. REG_SUBSTR获得一个string匹配(标量)
  6. REG_SUBSTR_TABLE匹配string信息列表(表)
  7. REG_TOKENIZE_TABLE不匹配string信息列表(由分隔符string分隔)(Table)
  8. REG_ALLTOKEN_TABLE列表不匹配的string和匹配的string信息(表)

脚本可以从这里下载。 (对不起,日语)

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

(英文: 机器翻译脚本:日文页面的最后一页)

我期待您的反馈和意见。

真正的答案是,DB2 确实支持正则expression式,因为PureXML是通过带匹配函数的xQuery添加的(包括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" 

了解更多信息:

除了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 

从DB2 11.1开始,有内置的正则expression式支持。 新function之一是REGEXP_SUBSTR ,还有一些。

 SELECT REGEXP_SUBSTR('hello to you', '.o',1,1) FROM sysibm.sysdummy1