Tol*_*ory 2 sql split ms-access-2007
当所需的部分被相同的字符“/”包围并且字符串的开头并不总是位于相同的索引时,如何选择字符串的中间部分?
e.g. "NWST/330/23/WT6" to "330" 
and  "NTW/1010/43/TY7" to "1010"
and  "TYQT/99/WYT3"    to "99"
我尝试过 SQL 函数的组合,包括CharIndex、Len、Left、Right、Mid和InStr,InStRe请帮助!?!?!?!
:(
您可以使用 VBA Split() 函数。您给它一个字符串并告诉它使用什么作为分隔符;它返回一个子字符串数组。在您的情况下,您似乎想要第二个子字符串,并且由于数组编号是从零开始的:
? Split("NWST/330/23/WT6", "/")(1)
330
您不能直接在 Access 查询中使用该函数,但可以创建使用它的自定义函数。
Public Function CustomSplit(ByVal pInput As String) As String
    CustomSplit = Split(pInput, "/")(1)
End Function
然后,从立即窗口:
? CustomSplit("NWST/330/23/WT6")
330
因此,您可以在从 Access 会话内部运行的查询中使用 CustomSplit()。但是,如果您使用其他方法(经典 ASP、Dot.Net 等)来查询 Access 数据库,则用户定义的函数不可用,因此您需要使用不同的方法。
因此,如果您的文本位于名为 raw_text 的字段中,则查询可能是这样的:
SELECT
    raw_text,
    CustomSplit(raw_text) AS middle_section
FROM YourTableNameHere;
如果您更喜欢不带自定义函数的查询,则可以使用问题中提到的一些函数。
SELECT
    raw_text,
    Mid(Left(raw_text, InStr(InStr(1, raw_text, "/") + 1,
        raw_text, "/") - 1), InStr(1, raw_text, "/") + 1)
        AS middle_section
FROM YourTableNameHere;
这些查询中的任何一个都会产生以下输出:
raw_text         middle_section
NWST/330/23/WT6  330
NTW/1010/43/TY7  1010
TYQT/99/WYT3     99