1 sql ms-access vba replace access-vba
我是SQL的新手,所以希望有人可以为我拼出这个.我尝试按照"在SQL查询中替换多个字符串"的帖子,但我被卡住了.
我正在尝试做与上述发布的发起人相同的事情,但使用不同的表和不同的字段.假设ShiptoPlant表" BTST" 中的以下字段" " 有三条记录(我的表实际上有数千条记录)......
表名:BTST
---------------
| ShiptoPlant |
| ----------- |
| Plant #1 |
| Plant - 2 |
| Plant/3 |
---------------
Run Code Online (Sandbox Code Playgroud)
这是我在SQL屏幕中输入的内容:
SELECT CASE WHEN ShipToPlant IN ("#", "-", "/") Then ""
ELSE ShipToPlant END FROM BTST;
Run Code Online (Sandbox Code Playgroud)
我一直收到消息(错误3075)...
"Syntax error (missing operator) in query expression
'CASE WHEN ShiptoPlant IN (";","/"," ") Then "" ELSE ShipToPlant END'."
Run Code Online (Sandbox Code Playgroud)
我想对键盘上的每个字符执行此操作,但"*"由于它是通配符.
您将提供的任何帮助将不胜感激!
编辑:从评论中添加的背景信息
我收集了2008日历年度每个14家供应商的项目发票级数据.我正在尝试规范供应商提供给我们的工厂名称.
每个供应商可以通过不同的名称来呼叫工厂,例如
供应商可以调用我们的主列表上的Signode服务
Signode Service
Signode - Service.
SignodeSvc
SignodeService
Run Code Online (Sandbox Code Playgroud)
我试图剥离非字母数字字符,以便我可以尝试使用我们的主列表来识别工厂,通过创建一系列链接来查看前10个字符,如果没有匹配,8个字符,6个,4个...
我的基本挂断是我不知道如何从表中删除字母数字字符.我将在几个列上执行此操作,但我计划创建单独的查询以编辑其他列.
也许我需要做一个剥离所有字母数字的大规模更新查询.我还不清楚如何写它.这就是我开始采取的所有空间.它工作得很好,但是当我尝试嵌套替换时失败了
UPDATE BTST SET ShipToPlant = replace(ShipToPlant," ","");
Run Code Online (Sandbox Code Playgroud)
编辑2:从评论中获取的进一步信息
每个月,我们的行项目发票数据中最多可显示100个新工厂名称的排列 - 这可能代表数千张发票记录.我正在尝试构建一种快速而又脏的方法,为每个工厂名称排列分配一个确定名称的master_id.我能看到的最好的方法是查看工厂,地址,城市和州字段,但问题是这些字段也有各种排列,例如,
128 Brookview Drive
128 Brookview Lane
Run Code Online (Sandbox Code Playgroud)
通过取出字母数字和做
LEFT(PlantName,#chars) & _
LEFT(Address,#chars) & _
LEFT(City,#chars) & _
LEFT(State,#chars)
Run Code Online (Sandbox Code Playgroud)
通过更改字符数直到发票数据和主工厂列表之间找到匹配(两个表都包含工厂,地址,城市和州字段),您最终可以找到匹配项.当然,当你开始逐渐减少你正在使用的字符数时LEFT,准确性会受到影响.我在excel中做到了这一点并且产量很高.有谁能推荐更好的解决方案?
您可能希望考虑用户定义函数(UDF)
SELECT ShiptoPlant, CleanString([ShiptoPlant]) AS Clean
FROM Table
Function CleanString(strText)
Dim objRegEx As Object
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.IgnoreCase = True
objRegEx.Global = True
objRegEx.Pattern = "[^a-z0-9]"
CleanString = objRegEx.Replace(strText, "")
End Function
Run Code Online (Sandbox Code Playgroud)