Avatar billede jensen363 Forsker
20. juli 2023 - 08:32 Der er 11 kommentarer og
1 løsning

Find bestemt tekst i række

I tabel 1 har jeg i en bestemt kolonne en tekst som udover en mængde anden information, også kan indeholde et bestemt nøgleord/tekst

I tabel 2 har jeg listen over nøgleord som jeg skal have identificeret fra Tabel 1

Eksempel

Tabel 1    =  HE S01052 indbet 15090
Tabel 2    =  S01052

I Tabel 1 skal nøgleord så indsættes/opdateres i en ny kolonne
Avatar billede Gustav Ekspert
20. juli 2023 - 08:46 #1
Du kan bruge en forespørgsel til at identificere dem:
Select Tabel1.*
From Tabel1, Tabel2
Where Tabel1.Felt1 Like '*' & Tabel2.KeyWord & '*'
Avatar billede jensen363 Forsker
20. juli 2023 - 09:50 #2
Den løsning er for tidskrævende, - tabellen med KeyWord har næsten 200K rækker :-(
Avatar billede jensen363 Forsker
20. juli 2023 - 09:54 #3
Jeg har en løsning i Excel som gør arbejdet med denne formel :

IFERROR(INDEX(KeyWord!A:A,AGGREGATE(15,6,ROW(KeyWord!A:A)/(ISNUMBER(SEARCH(KeyWord!A:A,[@KPPTXT]))),1)),"")

men vil gerne have noget tilsvarende integreret i Access
Avatar billede Gustav Ekspert
20. juli 2023 - 10:19 #4
Der er desværre ingen smarte løsninger på denne type opgave.
Et index på keyword-feltet er det eneste at gøre.

Hvor lang tid tager det, og hvor kort tid burde det tage?
Avatar billede jensen363 Forsker
20. juli 2023 - 11:12 #5
Stoppede den efter 15 minutter :-(
Avatar billede Gustav Ekspert
20. juli 2023 - 12:04 #6
Du kunne splitte det lange felt op i enkeltfelter:
HE S01052 indbet 15090 ->
HE
S01052
indbet
15090
Eller, hvis formatet er fast, udtrække nøgleordet:
KeyWord: Mid([Felt1], 4, 6)
S01052
Hvor mange poster er der i den anden tabel?
Avatar billede jensen363 Forsker
20. juli 2023 - 12:32 #7
Det er desværre tilfældigt hvor KeyWord befinder sig :-(
Avatar billede bvirk Guru
20. juli 2023 - 13:06 #8
Måske kører denne hurtige

[code]
select Tabel1.*
from Tabel1 inner join Tabel2 on inStr(Tabel1.felt,Tabel2.keyword) > 0
[/code]

og med et index på Tabel2 og ombyt evt rækkefølge af tabeller i inner join (jeg ved ikke hvordan det virker)
Avatar billede Gustav Ekspert
20. juli 2023 - 13:09 #9
Du kunne opsplitte linjen i felter med hver sit ord:
Public Function WordSplit( _
    ByVal Line As String, _
    ByVal Index As Integer) _
    As String
   
    Dim Parts()    As String
    Dim Value      As String
    Dim Numbers()  As String
    Dim NumberIndex As Integer
    Dim PartIndex  As Integer
     
    Parts = Split(Line)
   
    For PartIndex = LBound(Parts) To UBound(Parts)
        If Parts(PartIndex) <> "" Then
            NumberIndex = NumberIndex + 1
            ReDim Preserve Numbers(0 To NumberIndex)
            Numbers(NumberIndex) = LTrim(Numbers(NumberIndex) & " ") & Parts(PartIndex)
        End If
    Next
   
    If Index = -1 Then
        ' Return count of fields (as text).
        Value = CStr(UBound(Numbers))
    ElseIf Index <= UBound(Numbers) Then
        ' Return value of a field.
        Value = Trim(Numbers(Index))
    End If
   
    WordSplit = Value
   
End Function
og bruge denne i en forespørgsel:
Select 
    Id,
    WordSplit([Felt1], 1) As Word1,
    WordSplit([Felt1], 2) As Word2,
    WordSplit([Felt1], 3) As Word3,
    WordSplit([Felt1], 4) As Word4,
    WordSplit([Felt1], 5) As Word5
From
    Tabel1
- eventuelt skrive resultatet til en midlertidig tabel.

Herefter kan du filtrere eller joine denne med Tabel2 med søgeordene.
Avatar billede jensen363 Forsker
20. juli 2023 - 13:19 #10
Den sluttede efter ca 1½ time, - kan leve med det da øvelsen kun skal køre månedligt
Avatar billede Gustav Ekspert
20. juli 2023 - 14:10 #11
Hvordan gjorde du?
Avatar billede jensen363 Forsker
20. juli 2023 - 15:00 #12
Det var dit første forslag som jeg lod køre hen over frokost :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester