解析字符串拉美国州......但字符串可能包含也可能不包含城市

时间:2014-07-31 16:50:59

标签: sql vba ms-access

我希望解析一个字符串并从数据字段中获取状态名称。这是我的问题:在字段中经常有一个逗号和一个城市,所以我需要提取逗号之后的州名。踢球者有时候不是一个城市,有时会有:[

以下是我的想法:无论是否包含城市,它都包含州名。我可以将50个状态放入表中并对字段使用LIKE语句,因此无论是否使用逗号,它都将获取状态名称。如果城市可能是州的名称,或者城市名称的一部分包含州名... hrmmm,则问题就出现了。有人有任何提示吗?

另外,我需要一种方法将城市拉到另一个领域!那个很难,因为我无法拥有所有城市的数据库表来进行比较。

Sample data set: 
ANCHORAGE, ALASKA
BLOOMINGTON, MINNESOTA
FLORIDA
HENDERSON, NEVADA
NEW JERSEY
OKLAHOMA CITY, OKLAHOMA

2 个答案:

答案 0 :(得分:1)

<强> 1
如果字符串遵循结构,您可以尝试识别它(例如在NLP中) 例
结构1:[城市],[省],[国家],[大陆],[星球]
结构2:[prov],[country]

然后你所要做的就是识别结构。您可以使用元素数量和已识别项目(例如State / Prov)的位置来获取结构。

<强> 2
如果没有结构或需要考虑太多变化,我会使用对项目及其关系的识别 防爆。你可以识别一个状态,你知道如果字符串有一个城市,它就在状态之前。因此,检查状态前是否有字符串,字符串看起来像城市名称,然后保存。

这更有可能返回错误的结果(如果没有结构而且您无法识别城市的名称,那么只能识别一个这样的名称)< / p>

第3
看看你关于格式的最后评论总是&#34; [州]&#34;或者&#34; [城市],[州]&#34;。我可能高估了你的问题。如果格式真的只有那2个,那么就做蒂姆·威廉姆斯建议的那样。

使用分隔符&#34;,&#34;分割字符串 使状态成为split数组中的最后一个元素,如果split数组的大小为2(例如Ubound - Lbound + 1 = 2),则将city作为split数组中的第一个元素

方法3的VBA代码:

Sub test()
    s1 = "Alaska"
    s2 = "Anchorage, Alaska"
    s3 = "Texas"
    MsgBox parse(s1) & vbNewLine & parse(s2) & vbNewLine & parse(s3)
End Sub

Function parse(str As Variant) As String
    Dim state As String, city As String
    Dim splitArr() As String
    Dim output As String

    splitArr = Split(str, ", ")
    length = UBound(splitArr) - LBound(splitArr) + 1

    state = splitArr(UBound(splitArr))
    output = "State: " & state
    If length > 1 Then
        city = splitArr(LBound(splitArr))
        output = "City: " & city & ", " & output
    End If
    parse = output
End Function

答案 1 :(得分:1)

如果你有一张国家表,你可以说:

SELECT Address.Address, State.State
FROM State, Address
WHERE Address.Address Like "*" & [State] & "*"

如果你有新泽西州的佛罗里达州,这只会很尴尬。