我需要从包含多个具有不同格式的关键字的列中提取日期。
例如该列看起来像-
《每日生活时尚》 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函数,但是由于格式不一致,它们不能很好地工作
答案 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