如果每个字符串都不相同,如何使用MS Access中的SQL从字符串中提取特定的关键字?

时间:2019-07-03 22:05:21

标签: sql regex ms-access

我需要从包含多个具有不同格式的关键字的列中提取日期。

例如该列看起来像-
《每日生活时尚》 2018财年4月WK 4.xlsx
每日插座(FY18)6月WK 1.xlsx
每日插座FY19 MAR WK 1 VS2.xlsx
生活方式日报20财年7月WK 2A.xlsx

我正试图将关键字提取到新的列中,以使其看起来像-
FY18 APR WK 4
2018财年6月WK 1
FY19 MAR WK 1
20财年7月2日

我尝试使用Right和Left函数,但是由于格式不一致,它们不能很好地工作

3 个答案:

答案 0 :(得分:0)

这应该适用于MySQL 8.0或更高版本。有关REGEXP_INSTR的更多信息,请参见this

UPDATE myTable
SET newString = SUBSTRING(oldString, (REGEXP_INSTR([oldString], '%FY[0-9][0-9] [A-Z][A-Z][A-Z] WK [0-9]%')),13)

答案 1 :(得分:0)

在Access SQL中,您可以将VBA函数插入查询中。您的示例似乎遵循了某种模式,因此您可以尝试这样的操作。创建一个模块或将以下10行插入到现有模块中:

Function ExtractedValues(strValues As String)
Dim arValues
Dim strReturn As String
    arValues = Split(strValues, " ")
    For i = 2 To 5
        strReturn = strReturn & arValues(i) & IIf(i < 5, " ", "")
    Next
    strReturn = Replace(strReturn, ".xlsx", "")
ExtractedValues = strReturn
End Function

然后,在查询设计器中,选择表(和其他任何字段),然后添加一个具有此值的字段(将MyDateField更改为上述的原始数据字段):

MyExtractedDates: ExtractedValues([MyDataField])

根据所提供的示例,结果应该正是您要寻找的结果。

答案 2 :(得分:0)

只有一条代码行的辅助功能可以做到:

Public Function GetDatePart(ByVal Text As String) As String
    GetDatePart = Split(Split(Text, " ", 3)(2), ".")(0)
End Function

修改

Public Function GetDatePart(ByVal Text As String) As String

    Dim Parts() As String
    Dim Part1   As String

    Part1 = Split(Split(Text, " ", 3)(2), ".")(0)
    Parts = Split(Part1, "WK ")

    GetDatePart = Parts(0) & "WK " & Left(Parts(1), 1)

End Function