【问题标题】:Remove text after a codeword删除代码字后的文本
【发布时间】:2020-10-01 00:59:55
【问题描述】:

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

【问题讨论】:

  • 这是一项更新还是一个持续的过程?

标签: sql sql-server


【解决方案1】:

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

Here 是一个 dbfiddle。

【讨论】:

  • 太好了,我只需要将修剪更改为 ltrim,因为它抱怨“修剪”不是公认的内置函数名称。非常感谢!
  • @安娜。 . . trim() 是最近才推出的。
猜你喜欢
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 2019-01-22
  • 2023-04-02
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多