从字符串末尾删除字符

3
在 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


2
此外,WHERE 中的 LEFT 应该是 LEFT(STR,3) - zimdanen
2个回答

4
我认为正确的语法是:

我认为正确的语法是:

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

或者:

WHERE IV00103.VNDITNUM like 'DOR%'

1

由于LEFT缺少一个闭合括号,所以它不喜欢FROM附近的语法。我猜想你想要的是这样的:

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-某些字符_单个字符匹配的内容,那么你应该这样做:
UPDATE IV00103
SET VNDITNUM = LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2))
WHERE VNDITNUM LIKE 'DOR-%\__' ESCAPE '\'

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


@Dreamwalker 取决于你如何解释这个问题,但根据他们所说的,我认为 WHERE 子句根本不是正确的方法。在我看来,他们想选择所有内容,但只从具有特定格式的列中删除最后两个字符。 - Anthony Grist
@Anthony Grist 是的,你说得对,他不像在运行更新。 - Dreamwalker
@Dreamwalker 好的,经过所有这些,似乎他确实想要进行UPDATE操作,所以WHERE会是更好的选择。 - Anthony Grist
@JonM 我已使用相关的UPDATE语法更新了我的答案。起初我假设你想要保持数据库中的内容相同,但在查询某些应用程序时不包括修订号。 - Anthony Grist
谢谢大家!他们本来要让某人使用 Excel 电子表格来更改所有这些数字,然后再让我导入数据。>< 真痛苦。你在第一个回答中是正确的,因为我没有告诉你我想要更新。那是我的错! - Jon M
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接