我在名为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]
有人可以解释原因吗?请注意,上面给出的主字符串不包含任何空格。
答案 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()
更方便。