sql - 删除代码字后的文本
问题描述
我有一份公司名称列表,这些公司名称连同他们添加的公司编号一起发送。如何在 SQL 中删除这些公司编号(长度不同)?“有限”如果在名称中需要称为“LTD”。
例如:
Company_name
MORTISON & CO MANAGEMENT LIMITED - FSP986
SALT MANAGEMENT LIMITED FSP33457
Nes Wiki FSP23423435
我需要
MORTISON & CO MANAGEMENT LTD
SALT MANAGEMENT LTD
Nes Wiki FSP23423435
从“Limited”到“LTD”的更改我可以使用 case when 子句但是如何从 - FSP pr FSP 中删除所有内容?
我尝试了在两个不同页面中找到的一段代码,但它呈现空单元格。我可以不使用 '%' 来摆脱各种长度的数字吗?我在最后一个括号之前留下了 -x,因为我不知道数字的长度或位数。我如何处理我有时有 FSP 有时 - FSP
, LEFT(Company_name, CHARINDEX('FSP%',Company_name) )
解决方案
您可以使用patindex()
以获得更大的灵活性。但是,您确实需要检查不同的可能性:
select (case when company_name like '% - FSP[0-9]%'
then trim(left(company_name, patindex('% - FSP[0-9]%', company_name)))
when company_name like '% FSP[0-9]%'
then trim(left(company_name, patindex('% FSP[0-9]%', company_name)))
else company_name
end)
它也可以用 来完成charindex()
,但这并不能灵活地在 FSP 之后查找数字:
select (case when company_name like '% - FSP%'
then trim(left(company_name, charindex(' - FSP', company_name)))
when company_name like '% FSP%'
then trim(left(company_name, charindex(' FSP', company_name)))
else company_name
end)
这是一个 db<>fiddle。