3

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

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

但它不喜欢附近的语法FROMSTR = 'DOR'

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

-乔恩

4

2 回答 2

4

我认为正确的语法是:

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

或者:

WHERE IV00103.VNDITNUM like 'DOR%'
于 2013-10-29T14:24:48.973 回答
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 

VNDITNUM这绝对会从 IV00103 表中选择所有内容,仅从以 .开头的列中具有值的那些字符中删除最后两个字符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 该\字符用于转义模式中的特殊字符。第二个_是特殊字符,匹配单个字符。

于 2013-10-29T14:25:05.010 回答