首页 > 解决方案 > 删除代码字后的文本

问题描述

我有一份公司名称列表,这些公司名称连同他们添加的公司编号一起发送。如何在 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) )

标签: sqlsql-server

解决方案


您可以使用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。


推荐阅读