搜索并替换字符串 t-SQL

2024-05-06

每个人我都试图编写一个查询来替换末尾出现的所有字符串。 我有一些干扰词(确切地说是 104 个),如果它们出现在字符串末尾,则需要将其从字符串中删除。

例如,两个干扰词是 --Company, LLC

以下是一些示例和预期输出:

American Company, LLC --Expected output --American (both noise words should be removed)
American LLC,LLC --Expected output -- American
American Company American Company-- American Company American (one noise word occurs in between other words, so it should not be removed)

目前我有这个查询:

DECLARE @NEWSTRING VARCHAR(max) 
DECLARE @NEWSTRINGlength nvarchar(max)

SET @NEWSTRING = 'American Company American Company Company, LLC  LLC' ; 

SET @NEWSTRINGlength = len(@newstring)
SELECT @NEWSTRINGlength

CREATE TABLE #item (item Nvarchar(250) null)

INSERT INTO #item

SELECT 'Company' as item
UNION ALL 
SELECT 'LLC' as item

DECLARE @unwantedCharecters  VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!, ]%'

WHILE PATINDEX( @unwantedCharecters, @NEWSTRING ) > 0
SELECT @NEWSTRING = ltrim(rtrim(Replace(REPLACE( @NEWSTRING, SUBSTRING( @NEWSTRING, PATINDEX( @unwantedCharecters, @NEWSTRING ), 1 ),''),'-',' ')))

SELECT @NEWSTRING = substring(rtrim(@NEWSTRING), 1, len(@newstring) - len(ITEM)) FROM #item WHERE  rtrim(@NEWSTRING) LIKE '%' + ITEM

每次出现的干扰词都应该被删除,除非它们出现在其他词之间。


这就能解决问题:

WITH 
DirtyValues AS(
    SELECT * FROM (VALUES
          (1, 'American Company, LLC') --Expected output --American (both noise words should be removed)
        , (2, 'American LLC,LLC') --Expected output -- American
        , (3, 'American Company American Company')-- American Company American (one noise word occurs in between other words, so it should not be removed)
    ) AS T(ID, Dirty)
),
NoisyWords AS(
    SELECT * FROM (VALUES
          (' ') -- Just apend the chars to be filtered to your noise word list
        , (',')
        , ('LLC')
        , ('Company')
    ) AS T(Noisy)
),
DoSomeMagic AS(
    SELECT ID
         , Result = REVERSE(Dirty)
    FROM DirtyValues 
    UNION ALL 
    SELECT ID
         , Result = SUBSTRING(Result, DATALENGTH(Noisy)+1, DATALENGTH(Result))
    FROM DoSomeMagic
        CROSS APPLY(
            SELECT 
                  Noisy = REVERSE(Noisy)
            FROM NoisyWords
        ) AS T
    WHERE PATINDEX('%' + Noisy + '%', Result) = 1
),
PickBestResult AS(
    SELECT DoSomeMagic.ID
         , [clean as a whistle] = REVERSE(DoSomeMagic.Result)
         , [Rank]               = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DATALENGTH(Result) ASC)
    FROM DoSomeMagic
)
SELECT *
FROM PickBestResult
WHERE [Rank] = 1

它能做什么:

  • 前 2 个 CTE 是您的数据集,您当然希望将它们更改为您自己的表。
  • DoSomeMagic 是递归 CTE,首先反转字符串以便能够从末尾查找,然后交叉应用所有干扰词并检查字符串现在的开头是否以反向干扰词开头。如果是这样,请将其删除并继续,直到开始时没有发现干扰词。
  • 然后,PickBestResult 将对每一行进行 [Rank],结果最短的行将获得 Rank 1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搜索并替换字符串 t-SQL 的相关文章

随机推荐

  • $PATH 中 /usr/bin 和 /usr/local/bin 等的顺序

    在我的 Mac 上 我经常使用 bash 对于我的环境设置 我添加了 usr bin and usr local bin into PATH就像我平常做的那样 虽然我知道什么 usr bin and usr local bin关于 我很好奇
  • Android 手机号码验证

    如何检查电话号码是否有效 长度最大为13 包括字符 在前 我怎么做 我试过这个 String regexStr 0 9 String number entered number getText toString if entered num
  • 如果我从 python 中的多个不同进程登录到同一个文件,会发生什么?

    我花了几个小时来挖掘这种行为 首先是关于这些问题 write 2 到本地文件系统的原子性 https stackoverflow com questions 10650861 atomicity of write2 to a local f
  • 如何在我的项目中使用 FFTW DLL 导入库 .lib 作为静态 .lib?

    我了解 C 和编译小型插件 始终基于类似且布局的工作流程 虽然目前我需要将最新版本的 FFTW 编译成静态库 或者从编译版本中获取它 这应该会容易得多 但这给了我一个非常困难的时间 可能是因为我不知道编译的来龙去脉 请注意 我正在使用 Vi
  • 在慢速连接上使用 picasso 加载图像

    我正在使用 Picasso 加载列表视图的图像 问题是互联网连接速度很慢 如何更改 Picasso 中的加载超时时间 我的代码是 Picasso with context load MainActivity WEBSITE book ite
  • mongoDB 对嵌套对象数组的聚合查找

    我有一个如下所示的集合 但我无法执行 lookup 并按开始时的方式返回它 但包含填充的字段 我已经对我想要填充的字段发表了评论 代理 missions clients client title Tourn e libre agent 5d
  • 如何仅重置 Angular 5 中表单的特定字段

    我在我的组件文件之一中创建了一个函数来重置表单 myform onSubmit if this myform valid console log Form Submitted this myform reset 它可以很好地重置整个表单 但
  • 想要运行命令列表,但能够在运行时编辑该列表

    我有一个要运行的 bash 命令列表
  • 使 Flex 子项的高度等于网格列内父项的高度

    我正在尝试构建一个定价表 其中每列都包含一张卡片 我希望所有卡片都拉伸到其父 col 元素的高度 注意 我正在使用 Bootstrap 4 并尝试使用现有的网格系统来实现这一点 为了保持一致性 并使用这个特定的标记 我无法让卡片增长到其父容
  • 如何使用 Asp.Net MVC 3 和 Razor 获得特定于视图的 内容?

    除了 Layout cshtml 中已链接的内容之外 我还想在某些视图中链接特定的样式表 对于非 Razor 我看到使用内容占位符 我该如何为 Razor 执行此操作 Razor 中的内容占位符相当于部分 在你的 Layout cshtml
  • /usr/sbin/install 到底有什么作用?

    我正在尝试安装discount https github com Orc discount on my VPS http no de它基于Solaris 设置一些环境变量后编译效果很好 但是安装失败 https gist github co
  • Web 本地应用程序 Apache:运行 shell 脚本

    我开发了一个 shell 脚本 我想用它创建一个 UI 我决定使用带有本地服务器的 Web 界面 因为我对 HTML PHP 的了解很少 比 QT 或 Java 的了解更多 我只是希望我的 html 可以在我的计算机上运行 shell 脚本
  • 如何使用文本框在数据网格视图中搜索数据?

    这是我当前的代码 private void searchTextBox TextChanged object sender EventArgs e dataGridView1 DataSource as DataTable DefaultV
  • Chrome DevTools 中的渲染去了哪里?

    看起来渲染设置不再是原来的位置 即启用绘画闪烁 显示图层边框 显示 FPS 仪表 显示滚动性能问题 我怎样才能再次访问这些功能 渲染设置已移动铬48 您现在可以通过三点菜单图标 更多工具 渲染设置来访问它们 或者 您可以通过底部窗格的新菜单
  • 用宏包装函数(无需重命名)C

    我有兴趣通过包装现有函数调用来添加一些额外的逻辑without重命名它们 仅供测试 我发现的现有解决方案依赖于将函数包装在不同名称的宏中 这可能意味着更改大量代码 有什么建议么 请注意 我知道LD PRELOAD 但我有兴趣使用宏来检查传递
  • Vuetify 默认轮播 CSS 选择器,用于减少过渡持续时间

    I need a transition that does not produce the dreaded image blinking for a v carousel item Ideally it s a smooth and qui
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • 我要疯了吗? jQuery .click() 似乎不起作用

    下面的代码不适用于任何浏览器 它应该显示一个警报框 我究竟做错了什么 a href test a 将其放入 document ready 中
  • 获取所有按钮标签类型

    有没有办法使用 javascript 获取特定页面上的所有按钮标签及其类型 将此代码放在文档的加载事件中或 HTML 的底部 var buttons document getElementsByTagName button for let
  • 搜索并替换字符串 t-SQL

    每个人我都试图编写一个查询来替换末尾出现的所有字符串 我有一些干扰词 确切地说是 104 个 如果它们出现在字符串末尾 则需要将其从字符串中删除 例如 两个干扰词是 Company LLC 以下是一些示例和预期输出 American Com