很抱歉,如果主题不是很清楚,但这是我需要完成的事情。我有一张这样的桌子:
componentDidMount
我需要为每个用户获取朋友的数量(即,XML节点的数量)。 结果表应如下所示:
user_id | friends
==============================
75 | <friend name="bob" /><friend name="joe" />
76 | <friend name="bill" /><friend name="bob" />
77 | <friend name="sam" /><friend name="gary" /><friend name="john" />
以下SQL可以一次为一列执行此操作,但我不确定如何一次性对所有列执行此操作。
user_id | number_of_friends
==============================
75 | 2
76 | 2
77 | 3
结果如下表所示:
DECLARE @x XML;
SELECT @x = pval
FROM [mytable]
WHERE uid=75 AND pkey='roster';
SELECT COUNT(t.c.value('@name', 'NVARCHAR(MAX)')) AS number_of_friends
FROM @x.nodes('//friend') t(c);
答案 0 :(得分:2)
如果是 SQL Server ,您可以使用XQuery count函数:
SELECT [user_id],
friends.value('count(/friend)','integer') as number_of_friends
FROM YourTable
在 MySQL - ExtractValue():
SELECT `user_id`,
ExtractValue(`friends`, 'count(/friend)')
FROM `YourTable`
答案 1 :(得分:1)
您可以尝试这个技巧:删除(替换)您要搜索的内容并比较字符串长度的差异:
SELECT
user_id,
ROUND (
(
LENGTH(friends)
- LENGTH( REPLACE ( friends, "<friend", "") )
) / LENGTH("<friend")
) AS count
FROM friendtable
Count the number of occurrences of a string in a VARCHAR field?