0

我在名为 的列中有这个字符串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]

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

4

1 回答 1

1

我不建议您使用-0.5. 它可能有效,因为当浮点数转换回整数时(如函数所要求的那样),负数被“截断”为零。

我会建议:

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

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

LEFT()只是比 更方便SUBSTRING()

于 2016-10-24T12:07:21.197 回答