子串(...,...,CHARINDEX(....) - 0.5)函数

时间:2016-10-24 12:03:25

标签: sql-server string tsql substring charindex

我在名为Parent_ID的列中有这个字符串。存在的字符串示例:

RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC-001/B1

我想要的是:

RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC-001

没有/B1

当我写这段代码时:

SELECT Substring([parent_id], 1,
                 CHARINDEX('/B',parent_id,25)-1)
FROM [c3d_aug].[dbo].[atta_properties]

我收到了这个错误:

  

“消息537,级别16,状态3,行1传递给的长度参数无效   LEFT或SUBSTRING功能。“

经过测试后,我意外地将-1更改为-0.5,但工作正常。

SELECT Substring([parent_id],1,
                 CHARINDEX('/B',parent_id,25)-0.5)
FROM [c3d_aug].[dbo].[atta_properties]

有人可以解释原因吗?请注意,上面给出的主字符串不包含任何空格。

1 个答案:

答案 0 :(得分:1)

我不建议您使用-0.5。它可能有效,因为负数被截断"当浮点数转换回整数时(因为函数需要),负数的值为零。

我建议:

SElECT LEFT([parent_id],
            CHARINDEX('/B', parent_id + '/B', 25) - 1
           )
FROM [c3d_aug].[dbo].[atta_properties];

通过在字符串末尾添加模式,您不必担心从0返回CHARINDEX()

LEFT()SUBSTRING()更方便。