我们有表格Texts的列:
目前wordcount在所有行中都是-1,但我们想用这些数据填充列:
任何人都知道如何编写这样的UPDATE查询?
答案 0 :(得分:2)
如果你确定单词只用空格分隔(不是用逗号等)。你可以这样做:
X =使用LEN()
的字符串长度。
Y =使用REPLACE()
从行中删除空格后字符串的长度。
然后X - Y是字符串中的空格数,(X - Y)+ 1(第一个单词)是单词数。
SELECT (LEN(text) - LEN(REPLACE(text, ' ', ''))) + 1 FROM Texts
并转换为更新:
UPDATE TABLE TEXTS SET wordcount = (LEN(text) - LEN(REPLACE(text, ' ', ''))) + 1
目前没有MS SQL Server可用,所以我现在无法测试。
答案 1 :(得分:0)
尝试此查询:
UPDATE Texts SET wordcount =
len( replace( replace( replace( replace(text ,' [' ,'' ) ,']' , '') ,' (' ,'' ),')' ,'' )) -
len(replace( replace( replace( replace( replace(text ,' [' ,'' ) ,']' , '') ,' (' ,'' ),')' ,'' ),' ','')) +1
它完全适用于您的测试用例。
答案 2 :(得分:0)
如果你有SELECT
语句计算单词的数量,你可以这样做来计算非单词的数量' (括号括起)。
SELECT (LEN(text) - LEN(REPLACE(text, ' ', ''))) + 1 - (
LEN(text) - LEN(REPLACE(text, '(', ''))
)
FROM TEXTS
查看this SQLFiddle以了解查询的工作原理。
更新很容易实现:
UPDATE TEXTS
SET WORDCOUNT = (LEN(text) - LEN(REPLACE(text, ' ', ''))) + 1 - (
LEN(text) - LEN(REPLACE(text, '(', ''))
)
此更新仅在文本格式正确时才有效,所有打开的左括号都将关闭(文本中(
的数量与文本中)
的数量相同文本)。
但是,如果有可能在词周围有更多的开/括号括号,就像在拼写错误的情况下,你应该使用这个:
SELECT (
LEN(text) - LEN(REPLACE(text, ' ', '')))
+ 1
- (
CASE
WHEN LEN(text) - LEN(REPLACE(text, ')', '')) > LEN(text) - LEN(REPLACE(text, '(', ''))
THEN LEN(text) - LEN(REPLACE(text, '(', ''))
ELSE
LEN(text) - LEN(REPLACE(text, ')', ''))
END
)
FROM TEXTS
您可以找到SQLFiddle here。
在这种情况下,UPDATE语句将如下所示:
UPDATE TEXTS
SET WORDCOUNT = (
LEN(text) - LEN(REPLACE(text, ' ', '')))
+ 1
- (
CASE
WHEN LEN(text) - LEN(REPLACE(text, ')', '')) > LEN(text) - LEN(REPLACE(text, '(', ''))
THEN LEN(text) - LEN(REPLACE(text, '(', ''))
ELSE
LEN(text) - LEN(REPLACE(text, ')', ''))
END
)
)