Добавьте эту функцию в модуль VBA:
' ----------------------------------------------------------------------'
' Return a Date object or Null if no date could be extracted '
' ----------------------------------------------------------------------'
Public Function ExtractDate(value As Variant) As Variant
If IsNull(value) Then
ExtractDate = Null
Exit Function
End If
' Using a static, we avoid re-creating the same regex object for every call '
Static regex As Object
' Initialise the Regex object '
If regex Is Nothing Then
Set regex = CreateObject("vbscript.regexp")
With regex
.Global = True
.IgnoreCase = True
.MultiLine = True
.pattern = "(\d+\/\d+/\d+\s+\d+:\d+:\d+\s+\w+|\d+-\w+-\d+\s+\d+:\d+:\d+)"
End With
End If
' Test the value against the pattern '
Dim matches As Object
Set matches = regex.Execute(value)
If matches.count > 0 Then
' Convert the match to a Date if we can '
ExtractDate = CDate(matches(0).value)
Else
' No match found, jsut return Null '
ExtractDate = Null
End If
End Function
И затем использовать его, как это, например, в запросе:
SELECT ID, LogData, ExtractDate(LogData) as LogDate
FROM MyLog
Убедитесь, что вы подтвердили, что даты возврата hte соответствуют вашему формату и имеют смысл для вас. CDate()
интерпретирует строку даты различными способами в зависимости от вашей локали.
Если вы не получили желаемый результат, вам нужно будет изменить код, чтобы разделить отдельные компоненты даты и перестроить их, например, с помощью DateSerial()
.
Являются ли эти два шаблона, или вы хотите иметь дело с произвольными форматами дат? –
Это только два шаблона. – regulus