1

我有一个表,其中一列具有以下格式的大型 json 对象。列数据类型是 VARCHAR

column1
--------
{"key":"value",....}

我对列数据的第一个值感兴趣

在正则表达式中,我可以通过.*?:(.*),.*group(1) 给我价值

我如何在选择查询中使用它

4

4 回答 4

2

不要那样做,这是糟糕的数据库设计。将键和值作为列分解到它们自己的表中,或使用 XML 数据类型。XML 可以正常工作,因为您可以很好地索引结构,并且可以对数据使用 XPATH 查询。XPATH 原生支持正则表达式。

于 2012-12-16T12:09:41.237 回答
1

您可以在 xQuery 中使用正则表达式,您只需要从 SQL 查询或 FLORW 查询中调用函数匹配项。

这是一个如何在 SQL 中使用正则表达式的示例:

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"

了解更多信息:

于 2014-04-28T12:23:10.480 回答
0

不幸的是,DB2 没有任何内置的正则表达式功能。我确实找到了一篇关于如何使用库添加它的文章:

http://www.ibm.com/developerworks/data/library/techarticle/0301stolze/0301stolze.html

如果没有正则表达式,此操作将一团糟。您可以创建一个函数,逐个字符地遍历字符串以查找第一个值。或者,如果您需要做的不仅仅是这个操作,您可以创建一个解析 json 并将其放入键/值表的过程。不过,这两个听起来都不好玩。

于 2012-09-28T08:06:27.047 回答
0

在 DB2 for z/OS 中,您必须使用 PASSING 选项将变量传递给 XMLQUERY

db2 "with val as (
 select t.text
 from texts t
 where xmlcast(xmlquery('fn:matches($TEXT,''^[A-Za-z 0-9]*$'')'
               PASSING t.text as "TEXT") as integer) = 0
)
select * from val"
于 2015-12-17T13:32:25.000 回答