我有文本块,长度在 500 到 2000 个字符之间。
我需要做的是从描述中提取最多 1000 个字符,但只保留到最后一个句号或回车符 (Char(13)),这样文本就不会在句子中间被截断。如果同时存在句点和 Char(13),我理想情况下希望它在句点被切断。
我正在粘贴一些随机生成的文本来尝试展示我的意思。
*打开包装友好欣喜若狂,所以可能很幽默。充足的结束可能会愚蠢地安静一组说话她。我们不是前谷保证。四需要斑叶说我们找哩。被命令他确信 dashwoods 确实被没收了。害羞的庆幸遇见了她理所当然的感情。建议其处置吃晚婚好交际。图纸导致最大的添加主题努力同性恋记住。原则一但帮助你遇到不可能。谁的到来结束了如何肥沃的启用。哥她加还看到文章画的很自然笑眯眯的。自己在派遣有兴趣的人不知不觉中就会兴旺起来吧。她用友情喧闹她另一种深思熟虑的表达方式。生活很快就发生了。先生的事情做了很多其他人的虚荣心。教区的口味总是像父亲先生一样。
或者什么都不是主要地址。它使直接男人高度依赖。Ham windows 16 查询财富需求。是桑喜欢必须展示的。真是男儿法县她奈何不了她妹妹。脚你像六。现在,性行为中有休假法。在建表中脸红得飞快。功德背后就怕还是热情。在任何一个春天都希望如此。忧郁的方式留言*
我希望能够将所有文本返回到“主要地址”。(990 个字符)。
编辑:这是为了解决早期版本而发布的。
剩下的 1000 个字符很容易。
然后在左边1000的倒数中找到第一个句点。这就是你应该从原来的1000中减去多少。
喜欢:
...我认为 - 如果它擦掉句号或留下空格,您可能必须在某处添加一个。
你可以尝试像这个 Pix 这样的东西,看看它是否适合你。
只需将声明的变量更改为表中的列并删除 set 语句即可。至少它会给你一个模板。
可能不是最好的,但它适用于您的示例。
对于最初的要求——最多 1000 个字符,直到最后一个句点,但可能没有任何句点——以下是可行的:
The
LEFT(string, 1000)
用作从中获取的表达式,LEFT(expression, some number)
因为它确保不超过 1000 个字符,否则在字符串根本没有任何句点的情况下会发生这种情况。虽然LEFT(expression, 1000)
可以改为将整个包裹起来LEFT(string, 1001 - ...)
,但按照上面所示的方式进行操作应该允许重复使用表达式,因为它在函数内部也显示完全相同REVERSE
,因此效率更高一些。对于引入回车符作为要查找的回退字符的更新要求,您可以切换到使用
PATINDEX
,因为它可以查找字符列表:但是,添加了一项最终要求:
不幸的是,
PATINDEX
无法区分哪个先出现。在这一点上,似乎需要添加某种形式的条件逻辑:-(。在这里,我不仅重用了
LEFT(TestData, 1000)
,而且REVERSE(LEFT(TestData, 1000))
出现了 3 次,并且对于IIF
(这实际上只是 的简写CASE WHEN x THEN y ELSE x END
)我重用了整个CHARINDEX('.', REVERSE(LEFT(TestData, 1000)))
.示例代码发布在 Pastebin.com 上:
最多获取 1000 个字符,直到最后一个周期,否则到最终返回
该示例显示了上述 3 种方法在 7 个不同测试用例中的结果。