目标:我有一个带有Item_Desc列的Access表。我希望此专栏仅包含服装的品牌名称。品牌名称总是写在所有大写字母中,例如" RALPH LAUREN"。
问题: Item_Desc列中填充了品牌名称和服装类型(以及颜色等)。因此,Item_Desc列可以包含例如" RALPH LAUREN" (好)或可能" RALPH LAUREN涂黑色" (坏)。
问题:是否有可以运行的查询将删除Item_Desc中的单词:1)以大写字母后跟小写字母开头(例如," Coat&#34 ;),或2)仅以小写形式书写(例如,"黑色")。
因此," RALPH LAUREN涂黑色"最终将成为" RALPH LAUREN"在Item_Desc列中。
我的表名是"品牌"。
最后,我无法控制生成的报告,因此我很遗憾无法将品牌,样式和颜色导入单独的列中(我不会想到!)。
答案 0 :(得分:1)
您可以使用基于正则表达式的VBA函数来实现目标。
以下是使用示例输入在立即窗口中测试的一个此类函数:
? OnlyUpperCaseWords("RALPH LAUREN")
RALPH LAUREN
? OnlyUpperCaseWords("RALPH LAUREN Coat black")
RALPH LAUREN
您可以在UPDATE
查询中使用该功能来更改存储的 Item_Desc 值:
UPDATE Brand AS b
SET b.Item_Desc = OnlyUpperCaseWords(b.Item_Desc)
WHERE b.Item_Desc Is Not Null;
这是函数......
Public Function OnlyUpperCaseWords(ByVal strSource As String) As String
Static re As Object
If re Is Nothing Then
Set re = CreateObject("VBScript.RegExp")
re.Global = True
re.IgnoreCase = False
re.Pattern = "\s*\b[A-Za-z]*[a-z]+[A-Za-z]*\b\s*"
End If
'OnlyUpperCaseWords = re.Replace(strSource, vbNullString)
OnlyUpperCaseWords = Trim(re.Replace(strSource, " "))
End Function