从字符串末尾删除字符

时间:2013-10-29 14:21:13

标签: sql sql-server

在SQL Server 2008中,我需要从数据库中的一系列项目编号中删除最后两个字符。并非所有数字都是相同的格式,我只需要删除某些字符。我需要截断的数字看起来像DOR-12345_X,其中_X是修订版。我试过这个

 SELECT LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2) 
 FROM IV00103 
 WHERE LEFT STR = 'DOR'

但它不喜欢FROMSTR = 'DOR'

附近的语法

有人可以帮忙吗?你需要更多信息吗?我真是个新手在SQL =)谢谢!

-jon

2 个答案:

答案 0 :(得分:4)

我认为正确的语法是:

 SELECT LEFT(IV00103.VNDITNUM, LEN(IV00103.VNDITNUM)-2) 
 FROM IV00103 
 WHERE LEFT(IV00103.VNDITNUM, 3) = 'DOR'

或者:

WHERE IV00103.VNDITNUM like 'DOR%'

答案 1 :(得分:1)

它不喜欢FROM附近的语法,因为您错过了LEFT上的结束括号。我怀疑你想要的是这样的东西:

SELECT CASE WHEN IV00103.VNDITNUM LIKE 'DOR%' THEN LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2)) ELSE IV00103.VNDITNUM END AS VNDITNUM
FROM IV00103 

绝对选择IV00103表中的所有内容,只删除那些在VNDITNUM列中以DOR开头的值的最后两个字符。

编辑:如果你想真正更新表的内容,你可以使用WHERE这样做:

UPDATE IV00103
SET VNDITNUM = LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2))
WHERE VNDITNUM LIKE 'DOR%'

如果您只需要符合模式DOR-somecharacters_asinglecharacter的那些,那么您应该这样做:

UPDATE IV00103
SET VNDITNUM = LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2))
WHERE VNDITNUM LIKE 'DOR-%\__' ESCAPE '\'

\_是转义下划线,将被视为实际下划线。 ESCAPE '\'部分告诉SQL,\字符用于转义模式中的特殊字符。第二个_是特殊字符,匹配单个字符。