Sql 从字符串末尾删除字符

Sql 从字符串末尾删除字符,sql,sql-server,Sql,Sql Server,在SQLServer2008中,我需要从数据库中的一系列项目编号中删除最后两个字符。不是所有的数字都是相同的格式,我只需要删除某些数字中的字符。我需要截断的数字看起来像这个DOR-12345_X,其中_X是一个修订字母。我试过这个 SELECT LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2) FROM IV00103 WHERE LEFT STR = 'DOR' 但是它不喜欢FROM或STR='DOR' 有人能帮忙吗?你需要更多的信息吗

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

 SELECT LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2) 
 FROM IV00103 
 WHERE LEFT STR = 'DOR'
但是它不喜欢
FROM
STR='DOR'

有人能帮忙吗?你需要更多的信息吗?我真的是SQL=)的新手,谢谢


-jon

我认为正确的语法是:

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


它不喜欢中
附近的语法,因为在
左侧
缺少一个结束括号。我怀疑你想要的是这样的:

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\u asingaracter
匹配的字符,那么您可能应该:

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

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

另外,
中的
应该是
左(STR,3)
@Dreamwalker取决于你如何解释这个问题,但根据他们所说的,我认为WHERE子句根本不是正确的方法。在我看来,他们似乎想选择所有内容,但只从具有特定格式的列中删除最后两个字符。谢谢!这让我得到了我想要的选择=)有没有办法在同一个查询中用选择更新该字段?或者我必须运行另一个来更新这些字段?很抱歉,我对SQL真的很陌生。它全部在一列中,但只想截断DOR数。这似乎是我想要的。我只需要用截断的numbers@Anthony格里斯特:是的,你说得有道理。他又不是在开玩笑update@Dreamwalker“好吧,毕竟他似乎真的想做一个更新,那么哪里是更好的选择呢?”乔姆用相关的更新语法更新了我的答案。我最初假设您希望保持数据库中的内容不变,但在查询某些应用程序时不包括修订字母。
UPDATE IV00103
SET VNDITNUM = LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2))
WHERE VNDITNUM LIKE 'DOR-%\__' ESCAPE '\'