删除带有大写和小写字母或仅小写字母的单词

时间:2015-05-08 01:15:15

标签: sql ms-access uppercase lowercase

目标:我有一个带有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列中。

我的表名是"品牌"。

最后,我无法控制生成的报告,因此我很遗憾无法将品牌,样式和颜色导入单独的列中(我不会想到!)。

1 个答案:

答案 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