0

我在 SQL 中有 csv 文件

@code varchar(10) = 'pc-shr,pqr,qzcx,rtde,rz-fg,kj-hl,jk_lm'

我试过了

Convert(Varchar(10), @code) + CASE WHEN len(@code) >10 THEN '..etc' Else  '' END [code]

但我希望这意味着在字符串中找到最后一个逗号,然后添加 ..etc 它应该看起来像这样

'pc-shr、pqr、..etc'

4

3 回答 3

1

询问:

SQLFIDDLE示例

declare @code varchar(10) = 'pc-shr,pqr,qzcx,rtde,rz-fg,kj-hl,jk_lm'
select @code
--pc-shr,pqr

SELECT SUBSTRING(@code, 1, LEN(@code)-CHARINDEX (',' ,REVERSE(@code))) + '..etc'
--pc-shr..etc

如果您希望示例中的结果增加大小,则替换字符串的右侧部分最后一个逗号 -varchar(11)

编辑:你想要这个?

SELECT SUBSTRING(@code, 1, LEN(@code)-CHARINDEX (',' ,REVERSE(@code))+1) + '..etc'
--pc-shr,..etc

字符串中的最后一个逗号@code varchar(10)是这个 pc-shr* , *pqr 所以我添加..etc到它

SELECT SUBSTRING(@code, 1, LEN(@code)-CHARINDEX (',' ,REVERSE(@code))+1) + '..etc ' 
   +  SUBSTRING(@code, LEN(@code)-CHARINDEX (',' ,REVERSE(@code))+2,LEN(@code)) 
--pc-shr,..etc pqr
于 2013-08-23T07:40:43.000 回答
1

The main problem i found that is your variable declaration i.e. @code varchar(10). It fixes its size to 10. You can try belwo :

Declare @code varchar(max) = 'pc-shr,pqr,qzcx,rtde,rz-fg,kj-hl,jk_lm';    
IF LEN(@code) > 10 
BEGIN
    SET @code=SUBSTRING(@code, 0, 10) + ', etc...' 
END
于 2013-08-23T08:15:31.583 回答
1

这是你想要的?

SET @code= 
    CASE WHEN LEN(@code) > 10 
        THEN SUBSTRING(@code, 0, 10) + ', etc...' 
        ELSE '' 
    END
于 2013-08-23T07:37:28.047 回答