在SQL Server 2008中,我需要从数据库中的一系列项目编号中删除最后两个字符。并非所有数字都是相同的格式,我只需要删除某些字符。我需要截断的数字看起来像DOR-12345_X,其中_X是修订版。我试过这个
SELECT LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2)
FROM IV00103
WHERE LEFT STR = 'DOR'
但它不喜欢FROM
或STR = 'DOR'
有人可以帮忙吗?你需要更多信息吗?我真是个新手在SQL =)谢谢!
-jon
答案 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,\
字符用于转义模式中的特殊字符。第二个_
是特殊字符,匹配单个字符。