DB2 SQL中的正则表达式

时间:2011-01-21 21:00:55

标签: sql regex db2

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

5 个答案:

答案 0 :(得分:6)

我是komikoni(小西圭佑)。

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

正则表达式列表提供UDF

  1. REG_MATCHES 提供重合存在(标量)
  2. REG_REPLACE 字符串替换(标量)
  3. REG_COUNT 检索到的匹配数量(标量)
  4. REG_POSITION 匹配位置获取(Scalar)
  5. REG_SUBSTR 获取字符串匹配(Scalar)
  6. REG_SUBSTR_TABLE 匹配字符串信息列表(表)
  7. REG_TOKENIZE_TABLE 不匹配的字符串信息列表(除以分隔符字符串)(表)
  8. REG_ALLTOKEN_TABLE 不匹配字符串列表和匹配字符串信息(表)
  9. 可以从这里下载脚本。 (对不起,日语)

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

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

    我期待您的反馈和意见。

答案 1 :(得分: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"

了解更多信息:

答案 2 :(得分: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

答案 3 :(得分:5)

从DB2 11.1开始,内置了正则表达式支持。其中一个新功能是REGEXP_SUBSTR,还有一些功能。

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

答案 4 :(得分:2)

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

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

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

SQL不是XQuery !!!

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