我坚持这一点,希望有人能提供帮助。我有一个名为ITEMS
的表格,其中有两列,ITEMNO
和DESCRIPT
DESCRIPT
列长度为40个字符。我需要编写一个查询,将其拆分为列,最多30个字符。但是我不能把一个字切成两半。
我尝试过各种各样的方法,但却无法正常工作。因此,如果DESCRIPT
列总共有37个字符,而30则有一个字符而不是空格,我需要向后查找空格。这部分将成为第一个新的描述栏,在那一点之后剩下的,将是第二个新的描述栏
答案 0 :(得分:0)
试试这个:
SELECT ITEMNO,
DESCRIPT,
CASE WHEN LEN(DESCRIPT) > 30
THEN
LEFT(DESCRIPT, 30 - CHARINDEX(' ', REVERSE(LEFT(DESCRIPT, 30))))
ELSE
DESCRIPT
END As Descript1,
CASE WHEN LEN(DESCRIPT) > 30
THEN
RIGHT(DESCRIPT, LEN(DESCRIPT) - (30 - CHARINDEX(' ', REVERSE(LEFT(DESCRIPT, 30)))))
ELSE
NULL
END As Descript2
FROM ITEMS
说明:
第一种情况是返回列的整个文本,如果它少于30个字符,或者计算长度,直到第一个空格:
LEFT(descript,30)
将返回前30个字符
CHARINDEX(' ', REVERSE(LEFT(DESCRIPT, 30)))
反转此字符串并查找第一个空格,
LEFT(DESCRIPT, 30 - CHARINDEX(' ', REVERSE(LEFT(DESCRIPT, 30))))
在第31个字符之前的最后一个空格处剪切原始字符串。
另一列实际上是相同的,只使用RIGHT和len(描述) - 第30个字符之前的最后一个空格的位置。
如果列的文本少于30个字符,则第二种情况是避免异常。