Sql 如何确定街道名称或城市中是否需要空格?

Sql 如何确定街道名称或城市中是否需要空格?,sql,excel,vba,Sql,Excel,Vba,问题:我希望能够确定街道名称或城市名称中是否需要空格 原因是用户习惯于将两个词组合成一个词 例如,在数据库中,“贝尔花园”被输入为“贝尔花园” 它们是确定用户何时这样做并相应地添加空间的一种方法吗 你无法做到这一点,你需要某种模式来实现自动化,但在你的情况下,仅仅通过使用街道名称或城市名称来自动化“空间”是不可能的。你可以使用Regex,这是一个Regex验证测试 下面是如何做的解释 代码和正则表达式已更新,请转到末尾进行检查 打开Excel工作簿 Alt+F11打开VBA/宏窗口 在工具下添加

问题:我希望能够确定街道名称或城市名称中是否需要空格

原因是用户习惯于将两个词组合成一个词

例如,在数据库中,“贝尔花园”被输入为“贝尔花园”


它们是确定用户何时这样做并相应地添加空间的一种方法吗

你无法做到这一点,你需要某种模式来实现自动化,但在你的情况下,仅仅通过使用街道名称或城市名称来自动化“空间”是不可能的。

你可以使用Regex,这是一个Regex验证测试

下面是如何做的解释

代码和正则表达式已更新,请转到末尾进行检查

  • 打开Excel工作簿
  • Alt+F11打开VBA/宏窗口
  • 工具下添加对正则表达式的引用,然后引用
  • 并选择Microsoft VBScript正则表达式5.5
  • 插入新模块(代码需要驻留在模块中,否则无法工作)。
  • 在新插入的模块中,
  • 代码
  • 添加以下代码:

    Sub test_regex()
    
    Dim str As String
    Dim objMatches As Object
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1)
    Dim i As Long
    
    lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    'To check the name
    For i = 1 To lastrow
        str = Trim(CStr(Cells(i, 1)))
        Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp
        objRegExp.Pattern = "^(?![ ])(?!.*[ ]{1})(?:([A-Z][a-z]+\s*?)([Mc|O']*[A-Z][a-z]+\s*?)*(?!.*[ ])$)+$"
        objRegExp.Global = True
        Set objMatches = objRegExp.Execute(str)
        If objMatches.Count <> 0 Then
                ws.Cells(i, 2) = objRegExp.Replace(str, "$1" & " " & "$2")
                ws.Cells(i, 2).Interior.ColorIndex = 4
        Else
            ws.Cells(i, 2).Interior.ColorIndex = 3
            ws.Cells(i, 2) = ws.Cells(i, 1)
        End If
    Next i
    
    End Sub
    
    结果

    没有。你怎么知道“冬季花园”是一个词还是两个词?@GordonLinoff:好吧,我就是这么想的。我知道在excel中,它们是一种使用LTR之类的东西来区分数字和字符的方法。我想,如果他们是一个这样做的方式与字符。谢谢您的输入您有所有街道名称和城市的列表吗?也许用下拉菜单代替?或自动完成?您可以检查“有效”列表中的每个条目,测试条目(从中删除空格后)是否与用户输入匹配(从中删除空格后)。您可以检查大写字母,并在没有空格的大写字母前添加空格。当然,这将使您使用Mc Donald而不是McDonald,使用O'Brien而不是O'Brien,但您可能会编写例外程序,以防空格不能插入大写字母之前。
    Sub test_regex()
    
    Dim str As String, final_str As String
    Dim objMatches As Object
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1)
    Dim i As Long, k As Long, lastrow As Long
    
    lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    'To check the name
    For i = 1 To lastrow
        str = Trim(CStr(Cells(i, 1)))
        Set objRegExp = CreateObject("VBScript.RegExp") 'New regexp
        objRegExp.Pattern = "(?!.*[ ]{1})(?:(?:[Mc|O']*[A-Z]{1}[a-z]+)|(?:[\d]+[rd|th|st|nd]*))"
        objRegExp.Global = True
        Set objMatches = objRegExp.Execute(str)
        If objMatches.Count > 1 Then
              final_str = ""
              For Each m In objMatches
                final_str = final_str & " " & CStr(m.Value)
              Next
                ws.Cells(i, 2).Interior.ColorIndex = 3
                ws.Cells(i, 2) = Trim(final_str)
        Else
            ws.Cells(i, 2).Interior.ColorIndex = 4
            ws.Cells(i, 2) = ws.Cells(i, 1)
        End If
    Next i
    
    End Sub