【问题标题】:construct or clean names for SQL filter using Notepad++ or Excel使用 Notepad++ 或 Excel 构造或清理 SQL 过滤器的名称
【发布时间】:2020-09-08 23:02:31
【问题描述】:

我经常得到包含 1000 个公司名称的 excel 文件,我需要在我们的系统中匹配这些文件以获取他们的内部 ID 和其他指标,有没有一种简单的方法来进行这种清理

我的示例初始列表

Dash Network Inc.
Presto LLC
Blue origin, Inc.

我需要这样的输出,以便我可以在数据库中执行

UPPER(CMP_NM) LIKE 'DASH%NETWORK%'
OR UPPER(CMP_NM) LIKE 'PRESTO%'
OR UPPER(CMP_NM) LIKE 'BLUE%ORIGIN%'

我执行以下步骤,请问有什么简单的方法。

(1) convert the list to upper
(2) remove INC or LLC
(3) find and replace spaces with %
(4) find in regular expression (.+) and replace with '\1%' --> for before and after single quotes with %

【问题讨论】:

    标签: sql excel notepad++


    【解决方案1】:

    这里有两层:

    1. 消毒输入以确保安全。
    2. 规范化查询模式的输入。

    不要尝试#1

    清理 SQL 的输入是一项注定失败的任务。正确的程序是隔离这些输入,使其与 SQL 分开。实现这一点的机制是参数化查询或准备好的语句,具体取决于您选择的平台。

    我提出这一点,因为前导和尾随 % 通配符也应该作为这些查询的 SQL 的一部分包含在内。这也有助于使第 2 部分更容易一些。

    谈到第 2 部分,首先,在 Notepad++ 中,您可以对空间进行简单的查找/替换,以将 % 通配符放在其位置。标点符号的类似操作也很容易。您可以使用正则表达式选项将逗号、句点等放在单个字符类 ([,.;'/<>!@#$%^&*()]) 中,并将其替换为空文本框。

    使用此工具删除“Inc”和“LLC”比较棘手。主要问题是它们可能不是您唯一关心的 sn-p。 LTD 和 AG 作为其他选择浮现在脑海中,而且还有更多。在某些时候,您会需要一个表格,这意味着计算机代码...至少是 Excel 宏。

    接下来是使文本大写。相反,在这里我建议您依赖数据库的功能。默认情况下,大多数数据库平台已经不区分大小写,而那些不区分大小写的平台通常可以强制执行特定的排序规则。这就是你应该为此做的。

    我们需要考虑OR 条件。建议的解决方案效率极低。您可以通过使用带有 JOIN 的 table value constructor 来改进这一点。不知道你用的是什么数据库平台。该链接适用于 Sql Server,但其他数据库具有类似功能。这将使构建列表更容易一些。如果您将列表作为一系列 INSERT 语句运行到保存表中,那就更好了。然后你可以加入表,不需要特殊的语法。

    最后,我需要谈谈领先的% 通配符。这是对表演的绝对谋杀。如果您希望此查询在合理的时间内完成,并且您希望运行它或类似的东西,我强烈建议您研究全文索引和 CONTAINS 运算符。

    【讨论】:

    • 谢谢。是否有 notepad++ 命令来查找和替换尾随的 "Inc" 、 "LTD" 和 "LLC" 等,??
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多