Sql 解析字符串以提取我们的状态。。。但字符串可能包含城市,也可能不包含城市

Sql 解析字符串以提取我们的状态。。。但字符串可能包含城市,也可能不包含城市,sql,vba,ms-access,Sql,Vba,Ms Access,我希望解析一个字符串并从数据字段中获取状态名称。我的问题是:字段中经常出现逗号和城市,因此我需要提取逗号后面的州名称。踢球的人有时没有城市,有时有:[ 我的想法是:不管是否包含一个城市,它都包含州名。我可以将50个州放入一个表中,并对字段使用LIKE语句,因此无论是否使用逗号,它都会拾取州名。问题是,一个城市是否可能是州名,或者如果城市名的一部分包含州名e name…嗯。有人有什么建议吗 另外,我需要一种方法将城市拉到另一个领域!这个领域很难,因为我无法拥有所有城市的数据库表来进行比较 Samp

我希望解析一个字符串并从数据字段中获取状态名称。我的问题是:字段中经常出现逗号和城市,因此我需要提取逗号后面的州名称。踢球的人有时没有城市,有时有:[

我的想法是:不管是否包含一个城市,它都包含州名。我可以将50个州放入一个表中,并对字段使用LIKE语句,因此无论是否使用逗号,它都会拾取州名。问题是,一个城市是否可能是州名,或者如果城市名的一部分包含州名e name…嗯。有人有什么建议吗

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

Sample data set: 
ANCHORAGE, ALASKA
BLOOMINGTON, MINNESOTA
FLORIDA
HENDERSON, NEVADA
NEW JERSEY
OKLAHOMA CITY, OKLAHOMA
1.
如果字符串遵循结构,您可以尝试识别它(例如在NLP中)。
例如
结构1:[城市],[省],[国家],[大陆],[行星]
结构2:[省],[国家]

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

2.
如果没有结构,或者太多的变化要考虑,我会使用项目的识别和它们的关系。 例如,您可以识别一个州,并且您知道如果字符串有一个城市,它将位于该州之前。因此,请检查该州之前是否有一个字符串,并且该字符串看起来像一个城市名称,然后保存它

这更有可能返回错误的结果(如果没有结构,并且你无法识别一个城市的名称,那么可以做的只有这么多来识别一个)

3.
看看你最近关于格式总是“[州]”或“[市],[州]”的评论。我可能高估了你的问题。如果格式真的只是这两个,那么就照蒂姆·威廉姆斯的建议去做

使用分隔符“,”
将state设置为拆分数组中的最后一个元素,如果拆分数组的大小为2(例如Ubound-Lbound+1=2),则将city设置为拆分数组中的第一个元素

方法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

如果你有一个状态表,你可以说:

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

只有在新泽西州佛罗里达州的情况下,才会出现这种情况。

使用逗号拆分并获取结果arry中的最后一个元素。您的问题非常不清楚。VBA和SQL不可能同时存在(因为它们是完全不同的动物),所以请选择一个并删除另一个标记。其次,您还没有解释什么是“解析字符串并获取州名”意思是说。你想用你“拿走”的“州名”做什么?“把城市拉到另一个领域”是什么意思?你说可能没有城市,那么你“拉”什么在这种情况下?它总是
CITY,STATE
?它总是CITY,STATE-但只有当CITY存在时才是这样。正如您在示例数据中看到的,有时它并不包括CITY。另外,当我说解析字符串时,我指的是一个SQL代码,用于将该字段移动到单独的CITY和STATE列中。@KenWhite在MS Access中,SQL和VBA是related。您可以在VBA中使用Access SQL引用的用户定义函数。很抱歉,我对如何最好地使用split有点困惑。我这么说是因为如果一个城市存在,那么它的变量0就会出现。如果它只是一个州,那么该州就会变为变量0。您是否有一个可以在SQL查询中始终如一地工作的示例?更新了答案,是吗你不是什么意思吗?