作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的数据库中有一个字段,出于报告目的,我计划使用以下语句将其截断为 50 个字符。
SELECT (CASE WHEN (LEN(Notes) > 50) THEN SUBSTRING(Notes, 0, 50) + '...' WHEN (LEN(Notes) < 50) THEN SUBSTRING(Notes, 0, LEN(Notes)) + '...' ELSE 'NO NOTES WERE ENTERED' END) AS Notes FROM MyTable
这很好用,但是,我想完成注释字段中的最后一个单词,这样一个单词就不会被截断,所以我想使用 CHARINDEX、SUBSTRING、REVERSE 和可能的 RIGHT 函数来返回最后一个作为大约 50 个字符长的字符串的一部分的完整单词。
我已经试验过了,但运气不佳。
如有任何帮助,我们将不胜感激。
最佳答案
如果您的注释列的长度超过 50,您可以使用 CHARINDEX
查找位置 50 之后的下一个空格,然后使用 SUBSTRING
到该位置。这是一个SQL Fiddle .
SELECT RTRIM(
CASE
-- when the length is less than 50, or the character at position 50 is part of the last word, return the entire string
WHEN LEN(notes) < 50 OR (SUBSTRING(notes,50,1) <> ' ' AND CHARINDEX(' ',notes,50) = 0)
THEN notes
-- when the character at position 50 is a space, return the first 50 characters of the string
WHEN SUBSTRING(notes,50,1) = ' '
THEN LEFT(notes, 50)
-- when the character at position 50 is a word, cut off the string at the next space after 50
WHEN SUBSTRING(notes,50,1) <> ' '
THEN LEFT(notes,CHARINDEX(' ',notes,50))
END) AS first_50
FROM tbl_notes
关于tsql - 使用 SUBSTRING AND CHARINDEX 获取字段中的最后一个完整单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15909143/
我是一名优秀的程序员,十分优秀!