gpt4 book ai didi

mysql - 计算 Extract Value 找到匹配项的行数

转载 作者:行者123 更新时间:2023-11-29 12:46:20 24 4
gpt4 key购买 nike

表中有 100,000 行,其中包含存储大型 XML block 的列,我需要检查该列中是否填充了某个 XML 标记,假设该列名为 test_request,XML 标记为名为“d”。另外,我想确保“d”内的值在 XML 标记内不包含换行符/n。因此,对于每一行匹配的行,我想在总计数中加 1。这是我到目前为止的查询。

SELECT EXTRACTVALUE( UNCOMPRESS(`test__request` ) ,  count('/a/b/c/d') ) 
FROM testTable16
WHERE `test_created` > '2014-08-16 10:00:00'
AND `test_created` <= '2014-08-16 10:10:00'
AND `test_client` = 'test2'
AND `test_user` = 'testuser2'
AND UNCOMPRESS( `test__request` ) LIKE '%<testID>test</testID>%'
LIMIT 0 , 30

它不起作用,因为它返回 100,000 行,我显然无法筛选这些行。而且我不知道如何进行不是换行符检查。

最佳答案

如果您只想返回带有计数的行,则应将计数移至 WHERE 子句。

我的 XPATH 有点生疏,但我相信您可以使用包含函数的谓词:

SELECT *
FROM testTable16
WHERE `test_created` > '2014-08-16 10:00:00'
AND `test_created` <= '2014-08-16 10:10:00'
AND `test_client` = 'test2'
AND `test_user` = 'testuser2'
AND UNCOMPRESS(`test__request`) LIKE '%<testID>test</testID>%'
AND EXTRACTVALUE(
UNCOMPRESS(`test__request`),
'count(/a/b/c/d[contains(text(),"\n")])'
) > 0
LIMIT 0 , 30

如果您想返回至少有一个匹配项的所有行的计数,请使用SELECT COUNT(*) ...

如果您想要所有节点计数的总数,请使用:

SELECT SUM(EXTRACTVALUE( 
UNCOMPRESS(`test__request`),
'count(/a/b/c/d[contains(text(),"\n")])'
))
FROM testTable16
WHERE `test_created` > '2014-08-16 10:00:00'
AND `test_created` <= '2014-08-16 10:10:00'
AND `test_client` = 'test2'
AND `test_user` = 'testuser2'
AND UNCOMPRESS(`test__request`) LIKE '%<testID>test</testID>%'

关于mysql - 计算 Extract Value 找到匹配项的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25365599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com