SQL Server:删除具有特定长度的单词

Posted

技术标签:

【中文标题】SQL Server:删除具有特定长度的单词【英文标题】:SQL Server: Remove words having specific length 【发布时间】:2020-01-01 06:05:15 【问题描述】:

我需要从列中删除具有特定长度的单词。在我的例子中 我需要删除长度为 的单词。我总共有 100 万条记录。

+---------------------------+------------------------+
| Input                     | Output                 |
+---------------------------+------------------------+
| Steel rod 10 X 15 MM      | Steel rod              |
+---------------------------+------------------------+
| Syringe SM B 2.5 ML       | Syringe 2.5            |
+---------------------------+------------------------+
| 3.5 ML Syringe Disposable | 3.5 Syringe Disposable |
+---------------------------+------------------------+
| Syringe Disposable 2.5 ML | Syringe Disposable 2.5 |
+---------------------------+------------------------+

即使我的 输入 描述列中的数字也不需要。我有删除数字的功能。请指教。

【问题讨论】:

你的 sqlserver 版本是多少? @D-Shih,我使用的是 SQL Server 2014 可以参考this link先拆分字符串。 【参考方案1】:

SQL Server 的字符串处理功能很差。这可能是您在将数据加载到数据库时想要做的事情。

数据库中的一个解决方案是递归 CTE:

with cte as (
      select input, convert(varchar(max), input + ' ') as rest, convert(varchar(max), '') as output, 1 as lev
      from t
      union all
      select input,
             stuff(rest, 1, charindex(' ', rest), ''),
             (case when charindex(' ', rest) <= 3 then output
                   else output + left(rest, charindex(' ', rest))
              end),
             lev + 1
      from cte
      where rest <> ''
     )
select input, output
from (select cte.*, max(lev) over (partition by input) as max_lev
      from cte
     ) cte
where lev = max_lev;

Here 是一个 dbfiddle。

【讨论】:

以上是关于SQL Server:删除具有特定长度的单词的主要内容,如果未能解决你的问题,请参考以下文章

如何删除具有数据库所有者权限的 SQL Server 用户

SQL Server-一次删除具有IF EXISTS的多列

满足特定条件时从列表创建新列表

SQL Server:具有软删除功能的 Graph-DB 未按预期工作

SQL Server 创建 修改 删除数据表

如何在具有相同 ID 的列中选择不同的值然后删除它们 PHP SQL Server