Access не может распознать эту строку как допустимую дату из-за порядкового номера, запятой и десятичной дроби. Придется использовать функции обработки строк для перенастройки на распознаваемое значение даты / времени.
Если в строке всегда будет «th», запятая и от 1 до 3 десятичных знаков, примите во внимание: CDate(Replace(Replace(Left([field], InStrRev([field], ".") - 1), "th", ""), ",", ""))
Или используйте DateValue (), если нужно удалить компонент времени.
Однако я предполагаю, что будут значения без десятичных чисел, а также с разными порядковыми числами, и это выражение не будет выполнено. Далее предполагается, что ЧЧ: ММ: СС всегда будет 8 символов:
SELECT *, Left([Test],InStr([Test]," ")) AS Mo,
Val(Mid([Test],InStr([Test]," "))) AS Dy,
Mid([Test],InStrRev([Test],",")-5,5) AS Yr,
Mid(Test,InStrRev(Test,",")+1,9) AS Tm,
CDate([Mo] & [Dy] & [Yr] & [Tm]) AS NewDate
FROM Table;
Возможно, будет удобнее вызвать пользовательскую функцию VBA.
Function ConvDate(strDte As String) As Date
Dim Mo As String, Dy As String, Yr As String, Tm As String
Mo = Left(strDte, InStr(strDte, " "))
Dy = Val(Mid(strDte, InStr(strDte, " ")))
Yr = Mid(strDte, InStrRev(strDte, ",") - 5, 5)
Tm = Mid(strDte, InStrRev(strDte, ",") + 1, 9)
ConvDate = CDate(Mo & Dy & Yr & Tm)
End Function
Если вы хотите отбросить время часть, не объединяйте извлеченный компонент и не используйте DateValue () для возвращаемого значения даты / времени.
Согласованность в структуре имеет решающее значение при манипуляциях со строками. Чем больше вариаций, тем сложнее код.