Как извлечь конкретные ключевые слова из строки, используя SQL в MS Access, если каждая строка отличается? - PullRequest
0 голосов
/ 04 июля 2019

Мне нужно извлечь даты из столбца, содержащего несколько ключевых слов в разных форматах.

Например, столбец выглядит как -
Стиль жизни Daily FY18 APR WK 4.xlsx
Аутлет Daily FY18 ИЮНЬ WK 1.xlsx
Аутлет Daily FY19 MAR WK 1 VS2.xlsx
Стиль жизни Daily FY20 ИЮЛЬ WK 2A.xlsx

Я пытаюсь выделить ключевые слова в новый столбец, чтобы он выглядел как *
FY18 APR WK 4
FY18 ИЮНЯ WK 1
FY19 MAR WK 1
FY20 ИЮЛЬ WK 2

Я пытался использовать правую и левую функции, но они не работают должным образом, поскольку формат не соответствует

Ответы [ 3 ]

0 голосов
/ 04 июля 2019

В 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])

Результат должен быть именно тем, что вы ищете, основываясь на предоставленных примерах.

0 голосов
/ 04 июля 2019

Вспомогательная функция с одной строкой кода может сделать это:

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
0 голосов
/ 04 июля 2019

Это должно работать для MySQL 8.0 или новее.См. this для получения дополнительной информации о REGEXP_INSTR

UPDATE myTable
SET newString = SUBSTRING(oldString, (REGEXP_INSTR([oldString], '%FY[0-9][0-9] [A-Z][A-Z][A-Z] WK [0-9]%')),13)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...