Sql 如何从前缀表中删除字符并确保只删除字符串开头的字符

Sql 如何从前缀表中删除字符并确保只删除字符串开头的字符,sql,sql-server,vb.net,stored-procedures,Sql,Sql Server,Vb.net,Stored Procedures,我需要能够从产品代码中去除以下前缀,正如您所见,我包含了一个简单的查询,而下面显示的是我不想要的cm,我不能使用替换,因为它是代码替换cm的任何实例。前缀保存在supplire表中,与products表交叉引用 前缀并不总是两个chrachter,例如可以是TOW SELECT * , left(prod.productcode, LEN(sup.prefix)) AS MyTrimmedColumn FROM MSLStore1_Products prod ,supplier sup WH

我需要能够从产品代码中去除以下前缀,正如您所见,我包含了一个简单的查询,而下面显示的是我不想要的cm,我不能使用替换,因为它是代码替换cm的任何实例。前缀保存在supplire表中,与products表交叉引用

前缀并不总是两个chrachter,例如可以是TOW

SELECT *  , left(prod.productcode, LEN(sup.prefix)) AS MyTrimmedColumn
FROM MSLStore1_Products prod  ,supplier sup
WHERE prod.suppid = 9039 AND prod.SgpID = 171
and sup.supno = prod.suppid
产品代码:

ProductCode
CMDI25L
CMDI300M
CMDI750M
CMXFFP5L
前缀:

Prefix
CM
CM
CM
CM

您可以使用
SUBSTRING()
进行以下操作:

SUBSTRING(prod.productcode, LEN(sup.prefix))

(不同数据库管理器的具体语法可能不同)

您可能希望将前缀放在另一个表中,并通过筛选UDF运行productCode字段以检索最终代码

差不多

选择*,dbo.filterCode(prod.productcode)作为MyTrimmedColumn 来自MSLStore1_产品生产部、供应商支持部 其中prod.suppid=9039和prod.SgpID=171 和sup.supno=prod.suppid

然后只需定义一个UDF,它接受字符串产品代码并从前面删除任何前缀


对于真正大规模的查询,您可能会看到这样的UDF会对性能造成影响,如果是这样,那么最好生成一个产品代码表,而不使用前缀链接到带有前缀的产品代码。我对数据模式了解得不够,无法知道在没有交叉链接的情况下这是否真的可行。

我认为如何使用此查询并将查询结果输入到products表外部代码字段中

 SELECT *  , right(prod.productcode, len(prod.productcode) - LEN(sup.prefix) ) AS ExternalCoode
 FROM MSLStore1_Products prod  ,supplier sup
 WHERE prod.suppid = 9217 AND prod.SgpID = 123 and sup.supno = prod.suppid

我用这个SELECT*,right(prod.productcode,len(prod.productcode)-len(sup.prefix))作为来自MSLStore1_Products prod,supplier sup的mytrimmed列解决了这个问题,其中prod.suppid=9217,prod.SgpID=123,sup.supno=prod.supplies,结果相同。但是我不知道额外的
LEN()
是否需要更多的努力。你在找谁?这不是一个真正的答案,更像是一个评论。当你获得更多的代表时,系统会信任你,你可以在任何地方发表评论。同时,请不要发表评论作为答案。谢谢