使用xquery计算元素中字符的出现次数

时间:2018-04-23 09:57:37

标签: count xquery osb

我有一个变量,其|分隔值如下所示。

我需要确保它永远不会有超过30个由'|'分隔的序列,所以我相信如果我计算var中'|'的出现次数就足够了

class=1111|2222|3333|4444

请你帮忙写一下xquery

我是xquery的新手。

3 个答案:

答案 0 :(得分:2)

如果删除了除栏后的所有字符,然后使用let $s := '1111|2222|3333|4444' return string-length(translate($s, translate($s, '|', ''), ''))中的字符串长度,则会获得|个字符的数量。使用string-length和double translate来删除除了某个字符之外的任何东西都是一个旧的XPath 1技巧,当然XQuery也有replace你也可以使用let $s := '1111|2222|3333|4444' return string-length(replace($s, '[^|]+', ''))

答案 1 :(得分:1)

您可以使用tokenize()函数按SELECT COUNT(*) OVER () AS TotalRowsFound, dt.* FROM ( SELECT t.Title , t.ItemID , t.UploadDate , t.SevenDaySales as SelectedColumnSales , t.QuantitySold , t.CurrentPrice , t.CurrentPrice as LastSalePrice FROM dbo.SearchedUserItems t WHERE T.SearchedUserID = 5 ) dt GROUP BY ItemID, UploadDate, SelectedColumnSales, QuantitySold, CurrentPrice, LastSalePrice ORDER BY SelectedColumnSales DESC OFFSET + 55*0 ROWS FETCH NEXT 55 ROWS ONLY; 字符拆分值,然后使用fn:count()计算序列中的项目数。

请记住,tokenize函数使用正则表达式模式,因此您需要将|转义为|

\|

答案 2 :(得分:0)

只是为了好的衡量标准,如果你想进行任何性能比较,你可以试试

let $sep := string-to-codepoints('|')
return count(string-to-codepoints($in)[.=$sep])

这具有理论上的优势(至少在Saxon中)它不会在内存中构造任何新的字符串或序列。