我经常得到带有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 %
发布于 2020-09-08 15:20:21
这里有两层:
甚至不尝试#1
清理SQL的输入是一项注定要完成的任务。正确的过程是隔离--这些输入将与SQL分离。实现这一目标的机制是参数化查询或准备好的语句,这取决于您选择的平台。
我提到了这一点,因为引导和尾随%通配符也应该包含在这些查询的SQL中。这也将有助于使第2部分变得更容易一些。
说到第2部分,首先,在Notepad++中,您可以对一个空间进行简单的查找/替换,以便在其中放置一个%
通配符。类似的标点符号操作也很容易。您可以使用regex选项将逗号、句点等放在单个字符类([,.;'/<>!@#$%^&*()]
)中,并将其替换为空文本框。
用这个工具删除"Inc“和"LLC”要复杂得多。主要的问题是,它们可能不是你唯一关心的片段。联想到有限公司和AG作为其他选择,还有更多。总有一天你会想要一张表,这意味着电脑代码.Excel宏最少。
下一步是使文本大写。相反,我建议您依赖数据库的特性。默认情况下,大多数数据库平台已经不区分大小写,而那些不区分大小写的平台通常会强制执行特定的排序规则。你应该这么做。
我们需要考虑OR
的条件。提议的解决办法效率极低。您可以通过使用带有JOIN的表值构造函数来改进这一点。我不知道你在用什么数据库平台。该链接用于Server,但其他数据库具有类似的功能。这将使构建列表变得更容易一些。如果将列表作为一系列INSERT语句运行到保留表中,则更好。然后就可以加入到表中,而不需要特殊的语法。
最后,我需要谈谈领先的%
通配符。这绝对是表现上的谋杀。如果您希望在合理的时间内完成此查询,并且您曾经期望运行它,或者任何类似的操作,那么我再次强烈建议查看全文索引和包含操作符。
https://stackoverflow.com/questions/63802622
复制相似问题