Sql server 如何从破折号分隔的字符串中返回以完整单词结尾的前N个字符?
我需要一个函数,该函数首先输出以破折号分隔的输入字符串中的字符数 要求:Sql server 如何从破折号分隔的字符串中返回以完整单词结尾的前N个字符?,sql-server,tsql,Sql Server,Tsql,我需要一个函数,该函数首先输出以破折号分隔的输入字符串中的字符数 要求: >P,如果n在一个词的中间下降,包括输出中的最后一个词,即使总数大于n 如果输出以“-”结尾,LEN(输出)==N,则包括下一个字 示例:(N=70) 我已经使用了前70个字符,结果如下(我删除了结尾破折号-在这里不包括的单独步骤中): 在这种情况下,我需要一个返回以下内容的函数: this-is-product-url-prepared-for-better-Google-Search-Engnine-SEO-total
this-is-product-url-prepared-for-better-Google-Search-Engnine-SEO-totalLength
任何解决方案都将不胜感激。更新答案:修复了您的表达方式 这将起作用,并基于@Lukstroms发布的内容;his不能处理您的第二个要求(当@N是连字符的位置时) 先前的答案:
prepared-for-better-Google-Search-Engnine-SEO-totalLength
下面是如何使用this处理@N表示单词中间或破折号的情况
DECLARE
@Text VARCHAR(1000) = 'this-is-product-url-prepared-for-better-Google-Search-Engnine-SEO-totalLength-should-be-70-characters',
@N INT = 70;
SELECT SUBSTRING(@Text,0,MAX(ng.nxt))
FROM
(
SELECT ng.position, nxt = LEAD(ng.Position,1) OVER (ORDER BY ng.Position), ng.Token
FROM samd.ngrams8k(@Text,1) AS ng
WHERE ng.Token = '-'
) AS ng
WHERE ng.Position <= @N;
返回:
prepared-for-better-Google-Search-Engnine-SEO-totalLength
更新答案:修复了你的表情 这将起作用,并基于@Lukstroms发布的内容;his不能处理您的第二个要求(当@N是连字符的位置时) 先前的答案:
prepared-for-better-Google-Search-Engnine-SEO-totalLength
下面是如何使用this处理@N表示单词中间或破折号的情况
DECLARE
@Text VARCHAR(1000) = 'this-is-product-url-prepared-for-better-Google-Search-Engnine-SEO-totalLength-should-be-70-characters',
@N INT = 70;
SELECT SUBSTRING(@Text,0,MAX(ng.nxt))
FROM
(
SELECT ng.position, nxt = LEAD(ng.Position,1) OVER (ORDER BY ng.Position), ng.Token
FROM samd.ngrams8k(@Text,1) AS ng
WHERE ng.Token = '-'
) AS ng
WHERE ng.Position <= @N;
返回:
prepared-for-better-Google-Search-Engnine-SEO-totalLength
谢谢@LukStorms
我通过以下声明实现了这一点:
LEFT(@Text,CHARINDEX('-',@Text+'-',70)-1)
谢谢@LukStorms
我通过以下声明实现了这一点:
LEFT(@Text,CHARINDEX('-',@Text+'-',70)-1)
那么你试过什么,为什么不奏效?“我需要”不是一个问题;提示:在字符串中添加
-
,使其始终以可预测的方式结束,并且CHARINDEX
有第三个参数。左(@Text,CHARINDEX('-',@Text+'-',70)-1)
那么您尝试了什么,为什么不起作用?“我需要”不是一个问题;你在问什么?提示:在字符串中添加-
,这样它的结尾总是可以预测的,并且CHARINDEX
有第三个参数。左(@Text,CHARINDEX('-',@Text+'-',70)-1)
与LukStorm在注释中的答案相比似乎过于复杂。与LukStorm在注释中的答案相比似乎过于复杂。