Очень сомневаюсь, что это можно сделать только с помощью SQL.Разбор строк зависит от согласованности структуры.В этом случае:
1. количество элементов состояния меняется
2. слишком много элементов состояния для анализа с функциями Mid, Left, Right, InStr, InStrRev, Len
3. длина первой части меняется
4. Символ-разделитель (запятая) используется в другом месте в строке
Пример показывает, что после каждого пронумерованного элемента состояния нет пробела после запятой.С этим можно работать, хотя это означает потерю запятой после Дня и любых других запятых, за которыми следует пробел.Предполагается, что в строке нет других запятых без следующего пробела.Это было бы упрощено, если бы существовал другой символ, разделяющий элементы статуса, от которых можно было бы зависеть, чтобы иначе не отображаться в строке.Вот пример процедуры разбора:
Sub Test()
Dim x As String, aryX() As String, i As Integer
x = "01 - Text text on Jan 04, 2019,02 - Text text on Feb 04, 2019"
x = Replace(x, ", ", " ")
aryX = Split(x, ",")
For i = 0 To UBound(aryX)
Debug.Print Left(aryX(i), InStr(aryX(i), " on") - 1)
Debug.Print CDate(Mid(aryX(i), InStr(aryX(i), "on ") + 3))
Next
End Sub
Я предлагаю создать временную таблицу - таблица постоянная, но данные временные.Иметь достаточно полей, чтобы вместить до 15 состояний (или добавить эти поля в существующую таблицу).Откройте набор записей и переберите записи.Вместо Debug.Print запишите данные в поля.
Или, возможно, даже нормализуйте данные и запишите запись для каждого состояния в зависимую связанную таблицу.