如何在SQLServer中计算字符串的所有三元数
我想计算并计算SQL Server中字符串的所有三角形 例如,如果字符串为hello,我希望得到以下输出: Trigram Count ------- ----- hel 1 ell 1 llo 1 lo- 1如何在SQLServer中计算字符串的所有三元数,sql,sql-server-2008,Sql,Sql Server 2008,我想计算并计算SQL Server中字符串的所有三角形 例如,如果字符串为hello,我希望得到以下输出: Trigram Count ------- ----- hel 1 ell 1 llo 1 lo- 1 我仍然不知道n-gram是什么,但根据Ed的回答,这就是你需要的吗 declare @string varchar(max) = 'hello' declare @n int = 3 set @string = @string + REPLICATE('
我仍然不知道n-gram是什么,但根据Ed的回答,这就是你需要的吗
declare @string varchar(max) = 'hello'
declare @n int = 3
set @string = @string + REPLICATE('-',@n - (len(@string) % @n))
;with n as
(
SELECT 1 AS i
UNION ALL
SELECT i+1
FROM n
WHERE i <= (LEN(@string)-@n)
)
select SUBSTRING(@string, i, @n), COUNT(*)
from n
group by SUBSTRING(@string, i, @n)
option (maxrecursion 0)
根据Martin Smith的回答,添加了一个逻辑,将字符串填充为可被3整除的字符数
declare @string varchar(max) = 'hello'
SET @string = (SELECT CASE LEN(@string) % 3
WHEN 1 THEN @string + '--'
WHEN 2 THEN @string + '-'
ELSE @string
END )
;with n as
(
SELECT 1 AS i
UNION ALL
SELECT i+1
FROM n
WHERE i < (LEN(@string)-2)
)
select SUBSTRING(@string, i, 3) AS Trigram, COUNT(*) AS Count
from n
group by SUBSTRING(@string, i, 3)
option (maxrecursion 0)
借用Ed和Martin的话,我认为这是一个正确的实现:
declare @string varchar(max) = 'here kitty kitty'
SET @string = replace(@string, ' ', '-') --Wikipedia says this should be underscore, not dash
;with n as
(
SELECT 1 AS i
UNION ALL
SELECT i + 1
FROM n
WHERE i < (LEN(@string)-2)
)
select SUBSTRING(@string, i, 3) AS Trigram, COUNT(*) AS Count
from n
group by SUBSTRING(@string, i, 3)
option (maxrecursion 0)
请给出示例输入和所需输出。lo-必须是输出的一部分。我的问题是为什么?i、 你能更好地为那些不知道三叉戟是什么的人解释一下吗。。。。对于那些懒得读维基百科文章的人来说。Ed的解释正确吗?根据我的理解,下划线等于空格字符,因此如果输入字符串中没有空格,则不应出现下划线。在输入中用下划线替换所有空格应该可以。我不知道这是否正确,但是+1。你读过维基百科的文章吗?编辑:我明白了!我读了简明的三角图页。此算法提供与该页面相同的输出。