SQL - MS Access - 在两个已知文本字符串之间搜索文本

时间:2016-05-26 13:10:19

标签: sql ms-access

我希望提取以下字符串中的3个文本部分..

"/opt/odoo/projects/project/sftp_import_export_extend/models/sftp_import_export.py", line 47, in export_sftp

    export_time=now, external_data=external_data)

ValueError: "export_data() got an unexpected keyword argument 'external_data'" while evaluating

u'invoice_validate()'
  1. 2016年5月31日
  2. ups 1234
  3. po 1234
  4. 知道Requested Ship Date: 05/31/2016 Please charge shipping to: ups 1234 PO Number: po 1234 Requested Ship Date:以及Please charge shipping to:永远不会改变..但第二个和第三个的字符长度可以改变..

    我在SQL Access方面不是很好。我知道在Excel中使用right和find选项很容易..但在Access?

    有没有办法找到每个PO Number:的{​​{1}},然后减去结果?

    任何可以帮助我的想法?

1 个答案:

答案 0 :(得分:2)

使用Split()可以很容易地将输入字符串分成几部分并提取所需的部分。以下是Access Immediate窗口中的示例。

YourString = "Requested Ship Date: 05/31/2016 Please charge shipping to: ups 1234 PO Number: po 1234"
astrPieces = Split(YourString, " ")

? astrPieces(3)
05/31/2016
? astrPieces(9)
1234
? astrPieces(13)
1234

但是,Split()不能直接在Access SQL中使用。但是,由于您的查询只能在Access会话中运行,因此您可以创建一个使用Split()的VBA函数并在查询中使用该函数。

以下是此类功能的即时窗口示例。

? GetShipData(YourString, "date")
05/31/2016
? GetShipData(YourString, "ups")
1234
? GetShipData(YourString, "po")
1234

所以你的查询可能类似于:

SELECT
    GetShipData([YourFieldName], "date") AS ship_date,
    GetShipData([YourFieldName], "ups") AS ups,
    GetShipData([YourFieldName], "po") AS po
FROM YourTable;

这是我在上面的立即窗口示例中测试的函数:

Public Function GetShipData(ByVal pInput As String, ByVal pWhichItem As String) As String
    Dim astrPieces() As String
    Dim strReturn As String

    astrPieces = Split(pInput, " ")
    Select Case pWhichItem
    Case "date"
        strReturn = astrPieces(3)
    Case "ups"
        strReturn = astrPieces(9)
    Case "po"
        strReturn = astrPieces(13)
    Case Else
        strReturn = "fail" '<- figure out what you want here
    End Select
    GetShipData = strReturn
End Function

如果您的任何输入字符串与问题的示例字符串模式不匹配,您可能希望优化该函数。