删除特定字符后的部分字符串

时间:2014-09-22 10:25:44

标签: sql sql-server sql-server-2008

美好的一天

我试图在特定字符后删除字符串的一部分。当我使用特定的查询时,它几乎可以工作:

LEFT(T1.ItemCode, CHARINDEX('-VASA', T1.ItemCode) - 1) AS 'Item Code

我遇到的问题是,当我在结尾添加-1时,我得到一个错误:在LEFT或SUBSTRING函数上传递的长度参数无效。当我删除它时,返回项目代码但添加最后一个' - '我也试图摆脱。这是我要修复的项目代码示例:0C0002AC-GG-VASA =没有' -1'我得到0C0002AC-GG-希望它返回:0C0002AC-GG

由于 `

3 个答案:

答案 0 :(得分:1)

试试这个:

LEFT(T1.ItemCode, CHARINDEX('-VASA', T1.ItemCode + '-VASA') - 1) AS 'Item Code'

答案 1 :(得分:1)

问题是由于您的商品代码很少,可能没有“' -VASA'并且你正在搜索它的位置并再次做-1这是否定的。所以,首先检查你的单词所具有的天气' -VASA'在它与否。 喜欢:

Case when CHARINDEX('-VASA', T1.ItemCode) >=1 Then LEFT(T1.ItemCode, CHARINDEX('-VASA', T1.ItemCode) - 1) Else T1.ItemCode End AS 'Item Code'

答案 2 :(得分:0)

问题是如果-VISA中没有T1.ItemCode: 由于负值,CHARINDEX('-VASA', T1.ItemCode)返回0而LEFT(T1.ItemCode, 0 - 1)会出错。