gpt4 book ai didi

SQL 服务器 2012 : Remove text from end of string

转载 作者:行者123 更新时间:2023-12-02 08:22:13 27 4
gpt4 key购买 nike

我是 SQL 的新手,所以如果我使用了不正确的术语并且我的问题听起来很困惑,请原谅我。

我的任务是编写一个存储过程,它将 3 个变量作为字符串发送(我认为是 varchar)。我需要获取两个变量并从变量的末尾删除文本,并且只从末尾删除。

我需要从变量末尾删除的字符串/文本是

  • 共同
  • 公司
  • 公司
  • 公司
  • lp
  • 有限责任公司
  • 有限公司
  • 有限

例如这个字符串

Global Widgets LLC

会变成

Global Widgets

但是它应该只适用一次

Global Widgets Corporation LLC

应该变成

Global Widgets Corporation

然后我需要使用更改后的变量来执行 SQL 查询。

这将用作我们拥有的集成件的备份,该集成件可以调用另一个系统。另一个系统采用相同的变量并使用正则表达式从变量末尾删除字符串。

我已经尝试了 PATINDEX、SUBSTRING、REPLACE、STUFF 的不同组合,但似乎无法想出可以完成这项工作的东西。

============================================= ================

编辑:我要感谢大家到目前为止提供的答案,但我遗漏了一些我认为不重要但从答案来看似乎会影响处理的信息。

我的进程会开始类似

ALTER PROC [dbo].[USP_MyDatabaseTable] @variableToBeAltered nvarchar(50)
AS

然后我需要删除所有 . 字符。我已经想出如何做到这一点。然后,我需要对 @variableToBeAltered(技术上会有两个变量)进行处理,以删除我之前列出的字符串。然后我必须从 @variableToBeAltered 中删除所有空格。 (我又想通了那部分)。最后,我将在我的 SQL 查询中使用 @variableToBeAltered 之类的东西

SELECT [field1] AS myField
,[field2] AS myOtherField
FROM [MyData].[dbo].[MyDatabaseTable]
WHERE [field1] = (@variableToBeAltered);

我希望这些信息更有用。

最佳答案

我会把你所有的后缀都放在一个表中,这样会更容易一些。然后,您可以在查询中或针对变量执行这样的代码。

DECLARE @company_name VARCHAR(50) = 'Global Widgets Corporation LLC'

DECLARE @Suffixes TABLE (suffix VARCHAR(20))
INSERT INTO @Suffixes (suffix) VALUES ('LLC'), ('CO'), ('CORP'), ('CORPORATION'), ('COMPANY'), ('LP'), ('LTD'), ('LIMITED')

SELECT @company_name = SUBSTRING(@company_name, 1, LEN(@company_name) - LEN(suffix))
FROM @Suffixes
WHERE @company_name LIKE '%' + suffix

SELECT @company_name

这里的关键是你只匹配以后缀结尾的字符串,它使用 SUBSTRING 而不是 REPLACE 来避免意外删除任何后缀的副本从字符串的中间开始。

@Suffixes 表在这里是一个表变量,但您创建它并将其填充为永久表更有意义。

查询只会找到与其后缀与字符串末尾相匹配的一行(如果有的话)。如果找到匹配项,则该变量将被设置为一个子字符串,并从末尾删除后缀的长度。通常会有一个尾随空格,但对于一个 VARCHAR 来说,它只会被丢弃。

不过还有一些潜在的问题需要注意...

首先,如果您有一个像“Watco”这样的公司名称,那么此处的“co”就是误报。除了让您的后缀包含前导空格外,我不确定还能做些什么。

其次,如果一个后缀以您的其他后缀之一结尾,那么应用它们的顺序可能会出现问题。您可以通过只为 suffix 应用最大长度的行来解决这个问题,但它变得有点复杂,所以我暂时将其忽略。

关于SQL 服务器 2012 : Remove text from end of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35949941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com