拆分SQL Server列而不将字缩减一半

时间:2015-07-16 19:30:05

标签: sql sql-server

我坚持这一点,希望有人能提供帮助。我有一个名为ITEMS的表格,其中有两列,ITEMNODESCRIPT

DESCRIPT列长度为40个字符。我需要编写一个查询,将其拆分为列,最多30个字符。但是我不能把一个字切成两半。

我尝试过各种各样的方法,但却无法正常工作。因此,如果DESCRIPT列总共有37个字符,而30则有一个字符而不是空格,我需要向后查找空格。这部分将成为第一个新的描述栏,在那一点之后剩下的,将是第二个新的描述栏

1 个答案:

答案 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个字符,则第二种情况是避免异常。

see sql fiddle here (updated)

相关问题